【刷题算法】斐波那契数列的应用

    斐波那契以兔子繁殖为切入,提出一个古典问题: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 
    其数列是0、1、1、2、3、5、8、13、21、34、…… 
    在数学上,斐波纳契数列以如下被以递归的方法定义: F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)

    我刚好前几天看到google的一个面试题,题目是这样的:
    假设你正在爬M阶楼梯,每次你只能爬一阶或者两阶,你能有多少种不同的方法爬到楼顶部? 
    其实,这完全可以运用到斐波那契数列。
    以A(M)表示M阶阶梯所需要的step。
    那么快爬完楼梯的时候,最后一步无非两种情况,一种:只需要迈一阶即可。另一种:只需要迈两阶即可爬完楼梯。
 于是A(M)=A(M-1)+A(M-2)
    A(M-1)=A(M-2)+A(M-3)
    A(M-2)=A(M-3)+A(M-4) 
    ………
    而当M=1时 A(1)=1 M=2时 A(2)=2
    这样便可以递归出A(3),A(4)……直到A(M)
    符合斐波那契数列特点:F(n)=F(n-1)+F(n-2)
    此题便解出。

    爬楼梯问题的推广:
    特例: 那么如果步子不仅仅是一阶或者二阶,假设一步至多迈M阶,
    则 A(M)=A(M-1)+A(M-2)+…..+A(1)+A(0)
     A(0)表示之前没迈一步,之后一步迈完M阶
     A(0)=1;A(1)=1,A(2)=2;
     递推得: A(3)=A(2)+A(1)+A(0) =4
             A(4)=A(3)+A(2)+A(1)+A(0) =8
             A(5)=A(4)+A(3)+A(2)+A(1)+A(0) =16
             …
         得A(M)=2^(M-1);

      推广: M阶楼梯,假设一步迈N阶
       当(1《N《M) 即一步至多M阶,同特例 由特列知 A(M)=2^(M-1);
       当(1《N<M)  即一步至多N阶 
       A(M)=A(M-1)+A(M-2)+…..+A(M-N)         
       递归可得A(M)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值