【剑指**】递归附加题-变态跳台阶

递归附加题-变态跳台阶

题目描述

有一个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句话

Reference
  1. https://www.cnblogs.com/batys/archive/2013/09/19/3329955.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值