练习十一:兔子数量计算—斐波那契实例
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,
假如兔子都不死,问每个月的兔子总数为多少?
通过数学分析我们知道,兔子的规律为数列1,1,2,3,5,8,13,21....,看到规律了吗,我们熟悉的斐波那契数列。话不多说,上代码。
方法一:使用递归
1 def Fibonacci(n): 2 if n == 1: 3 return 1 4 elif n == 2: 5 return 1 6 elif n > 2: 7 return Fibonacci(n-1) + Fibonacci(n-2) 8 9 sum = 0 #定义初始值 10 for i in range(1,6): #计算五个月兔子,注意下:这里range中参数从1开始,从0开始话将报错 11 fibonacci = Fibonacci(i) #计算每个月兔子总数 12 sum += fibonacci #计算5个月后兔子总共多少对 13 print("第{}月的兔子为{}".format(i,fibonacci)) 14 print("5个月后兔子总数为{}".format(sum))
第1月的兔子为1 第2月的兔子为1 第3月的兔子为2 第4月的兔子为3 第5月的兔子为5 5个月后兔子总数为12
方法二:使用迭代器
1 def Fibonacci(n): 2 t,a1,a2 = 1,1,1 3 while t <= n: 4 yield a1 #使用生成器 5 a1,a2 = a2,a1+a2 6 t += 1 7 8 fibonacci = Fibonacci(5) 9 for i in fibonacci: #注意:也就是说将函数中的打印语句 换成 yield 语句, 以迭代器的形式来完成 10 print(i) 11
结果:
1 1 2 3 5