题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:在剑指fer第八题可知,f(n) = f(n-2)+f(n-1)
在此题中,f(n) = f(n-1) + f(n-2) + f(n-3) +...+ f(0)
同样f(n-1) = f(n-2) + f(n-3) + ...+f(0)
上下两式相减,可以得到f(n)-f(n-1) = f(n-1),即f(n) = 2f(n-1) = 2*2f(n-2) = 2*2*2f(n-3) = ...
所以可以用递归也可以直接用shsh数学公式
代码:
class Solution {
public:
int jumpFloorII(int number) {
return pow(2,number-1);
//return 2*jumpFloorII(number-1);//递归超出内存
//return 1<<(number-1);//1<<n为把二进制1向左移n位,例如0001左移两位为0100,转为十进制就是2*2=4
}
};