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

Posted hiluna

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了累死青蛙系列——青蛙跳台阶问题相关的知识,希望对你有一定的参考价值。

(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) = 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)

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

function jumpFloor(number){
    if(number==0 || number ==1){
        return 1;
    }else{
        return jumpFloor(number-1)*2;
    }
}

 

以上是关于累死青蛙系列——青蛙跳台阶问题的主要内容,如果未能解决你的问题,请参考以下文章

青蛙跳台阶问题

青蛙跳台阶

青蛙跳台阶

▷青蛙跳台阶◁

剑指 Offer(C++版本)系列:剑指 Offer 10- II 青蛙跳台阶问题

剑指 Offer(C++版本)系列:剑指 Offer 10- II 青蛙跳台阶问题