题目:古典问题:有一对兔子,从出生后第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))