算法之美——递推之兔子的计划生育

本文探讨了递归实现斐波那契数列导致的重复计算问题,通过自底向上的动态规划方法和迭代方式提高了效率。文章指出,递归虽然优雅,但存在额外的函数调用开销。最后,提供了迭代版的斐波那契数列计算代码,以减少计算复杂性。
摘要由CSDN通过智能技术生成
 
        从零开始学算法。
        首先说说递推吧,举一个耳熟能详的例子,就是有关兔子的计划生育问题:兔子的生育能力很强啊,一对兔子出生两个月后就能生一对兔子,并且以后每月都能再生一对。简单点说,就是新兔子要出生隔月后才能生(发育得很快嘛),那么现在想想,如果所有兔子都长命百岁,一年后有多少对兔子呢?
        经过月数:---0---1---2---3---4---5---6---7---8---9--10--11--12 
        兔子对数:---1---1---2---3---5---8--13--21--34--55--89-144-233  
        也就是说,这个月的兔子对数为:上个月的兔子对数+它们此月所生的小兔子对数。那么它们此月到底生了多少对小兔子呢?很明显,刚刚我们分析过,在上个月的兔子中,只有已经出生一月以上的老兔子才能生,其实就是上上个月的兔子对数,且每对生一对。于是就有了:本月兔子=上月兔子+上上月兔子。
        原来就是Fibonacci数列(其实人家本来就叫兔子数列)。
                F(1)=F(2)=1  (n=1对应上面的第0月)
                F(n)=F(n-1)+F(n-2) (n≥3)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值