递归附加题-变态跳台阶
题目描述
有一个n级的台阶,青蛙一次可以跳1次,也可以跳2次,…,也可以跳n次。问青蛙跳上一个n级的台阶,总共有多少种跳法。
题目分析
本题是斐波那契数列的升级版。按照这样的思路去分析。
用Fib(n) 表示青蛙跳上n阶台阶的跳法数。(设定 Fib(0) = 1)
当n=1时,只有1种跳法: Fib(1) = 1
只有1种情况,跳1步,一种跳法;
当n=2时,有2种跳法数: Fib(2) = Fib(0) + Fib(1) = 2
第一种情况,跳1步,则后面还有 Fib(2-1)种情况;
第二种情况,跳2步,则则后面有 Fib(2-2)种情况;
当n=3时,有4种跳法数: Fib(3) = Fib(0) + Fib(1) + Fib(2) = 4
第一种情况,跳1步,则后面还有 Fib(3-1)种情况;
第二种情况,跳2步,则后面还有 Fib(3-2)种情况;
第三种情况,跳3步,则后面还有 Fib(3-3)种情况;
考虑更一般的情况。
当n=n时,共有n种跳跃方式,第一次跳出1步后,有Fib(n-1)种,第一次跳出2步后,有Fib(n-2)种,…,第一次跳出n步后,有Fib(n-n)种。
于是
Fib(n)=Fib(n-1)+Fib(n-2)+…+Fib(n-n) (1)
同理,当n=n-1时,
Fib(n-1) = Fib(n-2)+…+Fib(n-1-n-1) (2)
(1)- (2)可得:
Fib(n) - Fib(n-1) = Fib(n-1)
于是 Fib(n) = 2*Fib(n-1)
综上,可以将结果归纳为:
对于上面的结果,还可以进一步的归纳。
观察n=1,2,3时,取值分别为1,2,4
又因为 Fib(n) = 2*Fib(n-1)
所以整个序列都是偶数
1 = 2^0
2 = 2^1
3 = 2^2
于是,进一步
Fib(n) = 2^(n-1)
这样,程序实现起来,只需要1句话