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))
 
相关推荐
圆圆讲门店2 小时前
挑选同城获客服务机构时需要考量的核心因素都有哪些?
大数据·网络·人工智能·python
傻啦嘿哟2 小时前
Python的默认参数把我坑惨了,原来写[]和写None的区别这么大
开发语言·python·机器学习
微小冷2 小时前
Python凸优化cvxpy初步
python·机器人·凸优化·数学规划·cvxpy
在世修行2 小时前
干货:显式映射 vs 自动判据
python·插件
xzal122 小时前
Python之简单理解栈和队列
python
lupai3 小时前
维修保养记录精准版 API 对接实战指南
数据库·python
顺顺 尼3 小时前
linux 进程信号(上)
linux·c++·算法
罗西的思考3 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 ---(5)--- GRPO
人工智能·算法·机器学习
水水不水啊3 小时前
告别杂乱的调试窗口:我用 Python + WebView 写了一个现代化串口助手
python·测试工具·嵌入式·嵌入式开发·串口调试·串口助手
richard_yuu3 小时前
动态规划:强化学习的「数学基础」,从 MDP 到值迭代
深度学习·神经网络·算法·yolo·机器学习·动态规划