递归算法经典示例之斐波那契数列

本文探讨了一个经典的数学问题:兔子繁殖。通过分析一对兔子如何在一年内繁殖,引出了斐波那契数列的概念。文章详细解释了兔子繁殖与斐波那契数列之间的关系,并提供了算法实现。

问题

一对兔子从出生后第三个月开始,每月生一对小兔子。小兔子到第三个月开始,能够生育下一代的小兔子。求1年中每个月的兔子的数量。

分析

根据问题,我们可以很容易地以列表的形式获得结果,如下所示。

种类一月二月三月四月五月六月七月八月九月十月十一月十二月
幼免1011235813213455
成免01123581321345589
总数1123581321345589144

设免子对数yyy与月份nnn的关系为fff,即 y=f(n)y = f(n)y=f(n)根据以上列表,我们可以发现免子数量与月份之间的关系为:
y=f(n)={f(n−1)+f(n−2),  if  n>2;1,      if  n≤1; y=f(n)= \left\{ \begin{matrix} f(n-1) + f(n-2),\ \ \mathrm{if} \:\: n > 2; \\ 1, \:\:\:\:\:\:\mathrm{if} \:\: n \le 1; \end{matrix} \right.y=f(n)={f(n1)+f(n2),  ifn>2;1,ifn1;

算法实现

int f(int n){
    return f(n - 1) + f(n - 2);
}

讨论

使用递归是一种非常易于理解的方法,但是运算效率并不高。主要原因在于每次计算 f(n)f(n)f(n) 的时候,都需要计算 f(n−1)+f(n−2)f(n-1) + f(n-2)f(n1)+f(n2),时间复杂度扩展了一倍,即O(2n)O(2^n)O(2n),运算效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值