python经典百题之兔子出生问题

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月

后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

这是一个经典的 Fibonacci 数列问题,可以通过递归或循环来解决。

递归方法:

由题意可知,第 n 个月的兔子数等于第 n-1 个月的兔子数加上第 n-2 个月的兔子数。设 f(n) 表示第 n 个月的兔子数,则有:

f(n) = f(n-1) + f(n-2)

同时,边界条件为 f(1) = f(2) = 1。

使用 Python 实现递归方法:

python 复制代码
def rabbit(month):
    if month == 1 or month == 2:
        return 1
    else:
        return rabbit(month-1) + rabbit(month-2)

month = int(input("请输入月份:"))
total_rabbits = rabbit(month)
print("{}个月后,兔子的总数为{}".format(month, total_rabbits))
 

循环方法:

同样,可以使用循环的方式计算 Fibonacci 数列。用变量 a 表示前一个数,b 表示当前数,将每次计算得到的数赋值给 b,同时将 a 赋值为之前的 b,直到计算到第 n 个数,即为所求的兔子总数。

使用 Python 实现循环方法:

python 复制代码
month = int(input("请输入月份:"))
rabbits = [1, 1]

for i in range(2, month):
    rabbits.append(rabbits[i-1] + rabbits[i-2])

total_rabbits = rabbits[-1] * 2
print("{}个月后,兔子的总数为{}".format(month, total_rabbits))
 

方法三:使用生成器

python 复制代码
def rabbits():
    a, b = 0, 1
    while True:
        yield b
        a, b = b, a+b

month = int(input("请输入月份:"))
total_rabbits = 0
for i, r in enumerate(rabbits()):
    if i >= month:
        break
    total_rabbits += r

print("{}个月后,兔子的总数为{}".format(month, total_rabbits*2))
 
相关推荐
IT小盘5 小时前
03-大模型API不只是发送Prompt-流式输出超时重试与异常处理
人工智能·python·prompt
Zzz不能停7 小时前
个人博客系统系统---测试报告【笔耕云】
python·功能测试·自动化·压力测试
互联网中的一颗神经元8 小时前
小白python入门 - 39. 采集流水线小项目
开发语言·python
徐小夕8 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
郭老二9 小时前
【Python】常用模块:xmlrpc
python
名字还没想好☜9 小时前
Python itertools 实战:用 groupby、chain、islice 优雅处理大数据流
linux·windows·python·迭代器·itertools
可编程芯片开发9 小时前
UPFC统一潮流控制器的simulink建模与仿真
算法
威联通网络存储10 小时前
TS-h2490FU在面板制造Array段AOI缺陷画廊中的并联
python·制造
小小仙子10 小时前
矢量网络分析仪如何测试S参数的?
人工智能·算法·机器学习