题目:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
考点:
递归和循环
分析:
台阶数 | 跳法 |
---|---|
1 | 1 |
2 | 2 |
3 | 4 |
4 | 8 |
5 | 16 |
6 | 32 |
7 | 64 |
8 | 128 |
... | ... |
归纳:f(n)=2*f(n-1);
代码实现:
function jumpFloorII(n)
{
// write code here
var fb = [1, 2];
for (var i = 2; i <= n; i++) {
fb.push(fb[i - 1]*2);
}
// console.log(fb[n])
return fb[n-1];
}
有大佬想到的另一种思路:
因为跳法1,2,4,8,16,32....即2^(n-1)
利用1左移来求数
左移位数 左移 结果 1<<0 0000 0001 1 1<<1 0000 0010 2 1<<2 0000 0100 4 1<<3 0000 1000 8 1<<(--n) ... 2^(n-1)
代码实现:
function Fibonacci(n) {
return 1<<(--n);
}