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))
 
相关推荐
2601_9516437710 小时前
Python第一,Java跌出前三,C语言杀回来了
java·c语言·python·编程语言排行·技术趋势
AC赳赳老秦12 小时前
OpenClaw+Power Apps 实战:自动生成 Power Apps 应用、连接 Excel 数据源
大数据·开发语言·python·serverless·excel·deepseek·openclaw
一只齐刘海的猫13 小时前
【Leetcode】找到字符串中所有字母异位词
算法·leetcode·职场和发展
海清河晏11113 小时前
数据结构 | 八大排序
数据结构·算法·排序算法
IronMurphy14 小时前
【算法五十七】146. LRU 缓存
算法·缓存
茉莉玫瑰花茶14 小时前
综合案例 - AI 智能租房助手 [ 5 ]
服务器·数据库·人工智能·python·ai
文艺倾年14 小时前
【强化学习】强化学习基本概念,20W字总结(一)
人工智能·python·语言模型·自然语言处理·面试·职场和发展·大模型
宸丶一14 小时前
Day 13:持久化记忆 - 让 Agent 拥有长期记忆
jvm·python·ai
凌波粒15 小时前
LeetCode--108.将有序数组转换为二叉搜索树(二叉树)
算法·leetcode·职场和发展