(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; } }
原文地址:https://www.cnblogs.com/hiluna/p/9387599.html
时间: 2024-11-02 22:29:45