问题描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法
当n为1时f(n)=1
n为2时f(n)=f(1)+f(2)
n为3时f(n)=f(2)+f(1)+f(0)
n为n时f(n)=f(n-1)+f(n-2)+f(n-3)+...f(n-(n)) (1)
则f(n-1)=f(n-2)+f(n-3)+...f(0) (2)
合并(1)(2)两式可得f(n)=f(n-1)+f(n-1)
因此f(n)=2*f(n-1)
代码如下:
int JumpFloorII(int target) {
if (target <= 0) {
return -1;
} else if (target == 1) {
return 1;
} else {
return 2 * JumpFloorII(target - 1);
}
}
更加深入后发现此递归即为2的幂次方,一行代码即可解决问题:
int JumpFloorII(int target){
return 1<<--target;}