python兔子繁殖问题

设有一对新生的兔子从第3个月开始他们每个月月初都生一对新兔子,
新生的兔子从第3个月开始又每个月月初生一对兔子,
求n个月后兔子的总对数
这个和求第n个斐波那契数有着异曲同工之妙
为什么n要-1

我们假设初始的这一对兔子是0个月
过1个月长1个月,长了2个月后,第3个月月初,它才2个月吧,就可以生兔子了
新生的一对兔子是月初出生的,所以过完那个月就一个月大了,再过1个月就可以生兔子了
所以初始化的时候是没有一个月的兔子的,需要过一个月才有,所以我们就减少一次循环

def rabit(n):
    if n==1 or n==2:
        return 1
    a=1
    b=1
    c=2
    for i in range(n-2):
        a=b
        b=c
        c=a+b
    return b

这个月的兔子只有两个来源,一个来源是上个月的老兔子(个数是f(n-1)),另一个来源是这个月刚出生的兔子,而这个月刚出生的兔子,就是两个月前的所有兔子(两个月前的兔子个数是f(n-2)),因为两个月前的所有兔子,无论两个月前就是老的,还是两个月前刚生的,到了这个月就全部具有生育能力,每只都可以下一对儿,所以可以得到一个递推关系f(n) = f(n - 1) + f(n - 2)。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值