累死青蛙系列——青蛙跳台阶问题
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; } }
以上是关于累死青蛙系列——青蛙跳台阶问题的主要内容,如果未能解决你的问题,请参考以下文章