累死青蛙系列——青蛙跳台阶问题

(1)斐波那契数列

f(1) = 1

f(2) = 2

f(n) = f(n-1) + f(n-2)

function Fibonacci(n)
{
    // write code here
    var a=[0,1];
    if(n>1){
        for(var i=2;i<=n;i++){
            a[i]=a[i-1]+a[i-2];
        }
    }
    return a[n];
}

(2)青蛙跳台阶

青蛙每次只能跳1个或2个台阶,有n阶台阶,青蛙有多少种跳法?

 这要倒过来想,当在第n阶台阶的前一步时,青蛙只有两种选择,1或2步,f(n) = f(n-1) + f(n-2)

这样就将题目转变成斐波那契数列了。

function jumpFloor(number)
{
    // write code here
    if(number<=0){
        return -1;
    }else if(number==1){
        return 1;
    }else if(number==2){
        return 2;
    }else{
        return jumpFloor(number-1)+jumpFloor(number-2);
    }     
}

 

(3)变态青蛙跳台阶

青蛙每次能跳1个或2个,……n个台阶,有n阶台阶青蛙有多少种跳法?

这题同样可以倒过来考虑

f(n) = f(n-1) + f(n-2) + ……+f(2) +f(1) +f(n-n)

但是这样不容易找到规律。所以我们这次采取从正面开始。

                               f(1) = 1

                    f(2) = f(2-1) + f(2-2) = 2f(1) = 2 ; 需要假设 f(0) 次为1,其意义为 :有n阶台阶,青蛙采取直接跳了n个台阶的策略

                          f(3) = f(3-1) + f(3-2) + f(3-3) = 2f(2) = 4;

             f(4) = f(4-1) + f(4-2) + f(4-3) + f(4-4) = 2f(3)  = 8;

大胆假设一下,f(n) = 2f(n-1) 这样是为了通过递归获取答案

function jumpFloor(number){
    if(number==0 || number ==1){
        return 1;
    }else{
        return jumpFloor(number-1)*2;
    }
}
原文地址:https://www.cnblogs.com/hiluna/p/9387599.html