题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
分析:
这题是跳台阶的变种,易知f(n) = 1 + f(n-1) + f(n-2) + ...... + f(1)。这种用递归肯定是有很多重复计算的,所以可以使用循环,从f(1)开始往上加。
分析有
f(1) f(2) f(3) f(4)
1 f(1)+1 f(1)+f(2)+1 f(1)+f(2)+f(3)+1
进一步分析有f(4) = 2f(1) + f(2) +2*1 = 2f(3); f(3) = 2f(2); f(2) = 2f(1)
有f(n) = 2^(n-1);
代码:
int jumpFloorII(int number) {
if(number<=0) return 0;
int fn = 1;
return fn<<(--number);
}