问题:一只青蛙一次可以跳上一阶台阶,也可以跳上二阶台阶,请这只可怜的青蛙跳上N阶台阶有几种方法?
1.当青蛙跳跳一个台阶时,只有1中跳法
2.当青蛙跳跳2个台阶时,只有2中跳法
3.在3个台阶时, 有 3种跳法 [(1,1,1),(1,2), (2,1) ];
4.在4个台阶时,有 5种跳法 [(1,1,1,1), (1,2,1), (1,1,2), (2,1,1),(2,2)];
即规律为(0,1,1,2,3,5...)(斐波那契数列)
js实现跳青蛙问题的代码:
function jumpFloor(n) {
if (n <= 0) return 0;
if (n == 1) return 1;
if (n == 2) return 2;
return jumpFloor(n - 1) + jumpFloor(n - 2)
}
console.log(jumpFloor(30)) // 输出 1346269
上面用递归实现的效率很低,当 N=50 的时候在chrome里就跑不动了,chrome会出现卡死。下面用迭代的方式效率会高出很多
function jumpFloor2(n) {
var target = 0, number1 = 1, number2 = 2;
if(n<=0)return 0;
if(n == 1) return 1;
if(n==2) return 2;
for(var i=3;i<=n;++i) {
target = number1 + number2;
number1 = number2;
number2 = target;
}
return target;
}
console.log(jumpFloor2(100)) // 输出 573147844013817200000
console.log(jumpFloor2(1000)) // 输出 7.0330367711422765e+208
console.log(jumpFloor2(10000)) // 输出 Infinity
通过上面的输出可以看到当N=10000时就就已经越界了,会输出 Infinity。但浏览器不会卡死,值还是会瞬间输出