题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
题目分析
这次的场景和之前青蛙跳台的问题不一样,前一次的场景是青蛙一次可以调1个台阶,也可以跳2个台阶。现在的场景是:青蛙也可以跳上n级。所以情况又发生了变化。
现在我们用数学归纳法来分析一下这个变种问题:
首先,当n=1时,只有一种跳法 f(1)=1。
其次,当n=2时,有两种跳法,每次跳1阶,或者一次性跳2阶。f(2) =2。
当n=3时,有4种跳法,第一种方式是第一次跳1阶,剩下的2个台阶有f(2)次跳法,f(2)=2,第二种方式是第一次跳2阶,剩下的1个台阶有f(1)=1种跳法,第三种方式是一次性跳3阶,f(0)=1。所以当n=3时,有f(2)+f(1)+f(0)=4。
当分析到n=3时,我们发现这种场景下,可以归纳到n>3时,f(n)=f(n-1)+f(n-2)+f(n-3)+f(...)+f(0)。而f(n-1)=f(n-2)+f(n-3)+f(n-4)+f(n-5)+f(..)+f(0)。两式相减,得到f(n)-f(n-1)=f(n-1),整理可以得到f(n)=f(n-1)*2。
分析到这,我们接下来写代码就容易得多了。
public static int JumpFloorII(int n){
if(n==1 || n==2){
return n;
}else{
return JumpFloorII(n-1)*2;
}
}