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))
 
相关推荐
05候补工程师4 分钟前
从算法理想向工程现实的跨越:SLAM 核心架构、思维误区与 Nav2 实战避坑指南
人工智能·算法·安全·架构·机器人
深度先生20 分钟前
Conda 全面讲解——数据科学家的标配工具
python
深度先生36 分钟前
虚拟环境:别让包打架
python
漠效1 小时前
随机代理‌IP访问脚本
开发语言·python
SilentSamsara1 小时前
元类与 __init_subclass__:类是如何被“创建“出来的
开发语言·python·青少年编程
手写码匠1 小时前
Android 17 适配实战指南:新特性解读、隐私变更与迁移全攻略
人工智能·深度学习·算法·aigc
隔壁大炮1 小时前
MNE-Python 第6天学习笔记:分段(Epoching)与基线校正
python·eeg·mne·脑电数据处理
珊瑚里的鱼2 小时前
leetcode42雨水
算法·leetcode
SilentSamsara2 小时前
concurrent.futures 实战:进程池与线程池的统一抽象
运维·开发语言·python·青少年编程
水木流年追梦2 小时前
大模型入门-大模型的推理策略
开发语言·python·算法·正则表达式·prompt