跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
分析
在本题里面,青蛙是只能跳1级或者2级的
当 n = 1, f(1) = 1
当 n = 2, f(2) = 2
当 n = 3, f(3) = 3
①第一种情况:先跳1级,于是剩下2级台阶 剩下2级台阶–>跳法不就是f(2)吗!
②第二种情况:先跳2级,于是剩下1级台阶 -> 跳法有 f(1) 种
综合两种情况,总共跳法有:
f(3) = f(2)(青蛙第一步跳1级)+ f(1)(青蛙第一步跳2级)
当 n = 4, f(4) = 3
①第一种情况:先跳1级,于是剩下3级台阶->跳法有 f(3)种
②第二种情况:先跳2级,于是剩下2级台阶 ->跳法有 f(2)种
综合两种情况,总共跳法有:
f(4) = f(3)(青蛙第一步跳1级)+ f(2)(青蛙第一步跳2级)
。。。
。。。
当 n = n, f(n) = f(n-1) + f(n-2)
综合: 当n < 4 f(n) = n
当n >= 4 f(n) = f(n-1) + f(n-2)
function jumpFloor(number)
{
// write code here
if(number < 4){
return number;
}else{
return (jumpFloor(number-1) + jumpFloor(number-2));
}
}
变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
分析
这道变态跳台阶和跳台阶不一样的地方是,这时候青蛙可以一次跳1-n级(跳台阶只能跳1级或2级),但是解题的思路是一样的
n级台阶,可以分为n 种情况
①第一步跳1级 -> 剩余阶梯 n-1 -> 跳法 f(n-1)
②第一步跳2级-> 剩余阶梯 n-2 -> 跳法 f(n-2)
③第一步跳3级-> 剩余阶梯 n-3 -> 跳法 f(n-3)
④第一步跳4级-> 剩余阶梯 n-4 -> 跳法 f(n-4)
。。。
第n种情况:第一步跳n级:一次跳完。。跳法当然只有一种啦!
f(n) = f(n-1) + f(n-2) + f(n-3) + f(n-4)…+1
so.。。。
当 n = 1 f(1) = 1;
当 n = 2 f(2) = 2;
当 n = 3 f(3) = f(2) + f(1) +1 = 4;
当 n = 4 f(4) = f(3) + f(2) + f(1) + 1 = 8
…
f(n) = f(n-1) + f(n-2) + f(n-3) + f(n-4)…+1
?是不是太复杂了?其实可以用高中数学知识化简一哈~?
①f(n) = f(n-1) + f(n-2) + f(n-3) + f(n-4)…+1
②f(n-1) = f(n-2) + f(n-3) + f(n-4)…+1
聪明的你肯定发现了: ①式加粗部分可以用②式也就是f(n-1)替换!
so…化简得到?
f(n) = f(n-1) + f(n-1) = 2*f(n-1) (n > 1)
然后我们就可以写代码啦:
function jumpFloorII(number)
{
// write code here
if(number <= 0){
return 0;
}
else if(number === 1){
return 1;
}
else{
return 2*jumpFloorII(number-1);
}
}