古典问题:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
方法一:简单方法
month = int(input("请输入月份: "))
if month == 1 or month == 2: #兔子从第三个月才开始生兔子,所以前两个月单拿出来
print("总共有兔子数为1只")
else:
a = 1
b = 1
c = 0
for i in range(3, month + 1):
c = a + b #第n个月等于第n-1个月+第n-2个月
a = b
b = c
print("总共有兔子数为:", c)
输出结果:
方法二:很明显兔子的规律满足斐波拉契数列,通项公式为:a(n) = a(n-1)+a(n-2),且每个月的兔子数量都可以用斐波那契数列的通项公式求出,若把每个月的兔子数量放在一个列表里,那么列表的第n个元素,就是第(n+1)个月的兔子数量。
代码如下:
fibs = [0, 1]
mouth = int(input("请输入所求月份:"))
for i in range(1, mouth):
fibs.append(fibs[i] + fibs[i - 1])
print('第', mouth, '月有', fibs[mouth], '对兔子')
输出结果: