传说,在很久很久以前,有一个意大利青年叫 斐波那契,有一天他提出了1个很有意思的问题:
1. 假设1对小兔子,1个月之后会长成1对大兔子。
2. 假设1对大兔子,每个月都会生1对小兔子。
3. 问: 所有兔子都不死的情况下,1对小兔子,1年(12个月)之后,会变成多少对兔子?
# 方法 1:递归
# 规律: 从第3个月开始, 兔子对数 = 前两个月兔子对数之和。
def get_rabbit(month): # 定义函数,形参为月份
if month in [1, 2]:
return 1 # 出口:前两个月兔子对数为 1
else: # m月的兔子对数 = (m - 1)月的兔子对数 + (m - 2)月的兔子对数
return get_rabbit(month - 1) + get_rabbit(month - 2)
# 调用函数, 获取结果.
print(get_rabbit(12))
# 方法 2:循环、列表
rabbit_count = [] # 1. 定义列表, 记录每月的兔子对数.
# 2. 前两个月兔子对数为1
rabbit_count.append(1) # 1月的索引: 0
rabbit_count.append(1) # 2月的索引: 1
# 3. 计算从3月份开始, 至12月份间, 兔子的对数.
for i in range(2, 12): # 2 ~ 11, 对应的分别是: 3月 ~ 12月
rabbit_count.append(rabbit_count[i - 1] + rabbit_count[i - 2])
# 4. 打印列表的最后1个元素, 即为: 12月兔子对数.
print(rabbit_count[11])
# 方法 3:循环
big_num = 1 # 3月时大兔子的对数
small_num = 0 # 3月时小兔子的对数
for i in range(1, 12-1): # 遍历3月至12月
up = small_num # 小兔子长成大兔子的对数
small_num = big_num # 大兔子生小兔子的对数
big_num += up # 大兔子加上新长大的小兔子
print(big_num + small_num) # 输出12月是兔子总对数