Python 递归+缓冲机制解决,生兔子问题(斐波那契)

本文探讨了经典的兔子繁殖问题,通过三种不同的算法实现:正常递归、缓存机制一和缓存机制二,详细展示了如何计算特定月份的兔子总数,并对比了不同算法的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:
有一对兔子,从出生后第四个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子。
假如兔子都不死,计算第十个月兔子的总数?


正常递归解法

#-*- coding:utf-8 -*-

#----------------------------------------------------------------------
def rabbits(months):
    """"""
    if months < 2:
        return 1
    return rabbits(months-1) + rabbits(months-2)
    

if __name__ == "__main__":
    n = input('months = ')
    n = int(n)
    for i in range(2,n+1):
        print(f"第{i}个月有{rabbits(i)}只兔子")

months = 52个月有2只兔子
第3个月有3只兔子
第4个月有5只兔子
第5个月有8只兔子

缓存机制解法一

def fib(N):
    if N == 0:
        return 1
    if N == 1:
        return 1
    arr = [1 for i in range(N+1)]
    for i in range(2, N+1):
        arr[i] = arr[i-1] + arr[i-2]
    return arr[N]

缓存机制解法二
大体思路:在递归的过程中添加一个缓存机制,这样就可以避免重复递归调用了

def rabbits(months,buffer):
    if months < 2:
        return 1
    
    if months in buffer:
        return buffer[months]
    
    result = rabbits(months-1,buffer) + rabbits(months-2,buffer)
    buffer[months] = result
    return result

运行结果:

months = 500个月有1只兔子
第1个月有1只兔子
第2个月有2只兔子
第3个月有3只兔子
第4个月有5只兔子
第5个月有8只兔子
第6个月有13只兔子
第7个月有21只兔子
第8个月有34只兔子
第9个月有55只兔子
第10个月有89只兔子
第11个月有144只兔子
第12个月有233只兔子
第13个月有377只兔子
第14个月有610只兔子
第15个月有987只兔子
第16个月有1597只兔子
第17个月有2584只兔子
第18个月有4181只兔子
第19个月有6765只兔子
第20个月有10946只兔子
第21个月有17711只兔子
第22个月有28657只兔子
第23个月有46368只兔子
第24个月有75025只兔子
第25个月有121393只兔子
第26个月有196418只兔子
第27个月有317811只兔子
第28个月有514229只兔子
第29个月有832040只兔子
第30个月有1346269只兔子
第31个月有2178309只兔子
第32个月有3524578只兔子
第33个月有5702887只兔子
第34个月有9227465只兔子
第35个月有14930352只兔子
第36个月有24157817只兔子
第37个月有39088169只兔子
第38个月有63245986只兔子
第39个月有102334155只兔子
第40个月有165580141只兔子
第41个月有267914296只兔子
第42个月有433494437只兔子
第43个月有701408733只兔子
第44个月有1134903170只兔子
第45个月有1836311903只兔子
第46个月有2971215073只兔子
第47个月有4807526976只兔子
第48个月有7778742049只兔子
第49个月有12586269025只兔子
第50个月有20365011074只兔子


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹏AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值