设有一对新生的兔子从第3个月开始他们每个月月初都生一对新兔子,
新生的兔子从第3个月开始又每个月月初生一对兔子,
求n个月后兔子的总对数
这个和求第n个斐波那契数有着异曲同工之妙
为什么n要-1
- 我们假设初始的这一对兔子是0个月
- 过1个月长1个月,长了2个月后,第3个月月初,它才2个月吧,就可以生兔子了
- 新生的一对兔子是月初出生的,所以过完那个月就一个月大了,再过1个月就可以生兔子了
- 所以初始化的时候是没有一个月的兔子的,需要过一个月才有,所以我们就减少一次循环
注意我这也只是推理,并没有去根据规律去做
def f(n):
# 一个月的兔子
a = 1
# 二个月的兔子
b = 0
# 成年兔
c = 0
for i in range(n-1):
# 过一个月新生的兔子数目应该等于上个月成年兔子的数目加上2个月大的兔子的数目
# 注意刚生出来是月初,过完这个月就1个月大了,所以新生兔子就可以直接理解成是1个月大的兔子
a,b,c = b+c,a,b+c
print(a+b+c)
f(1)# 1
f(2)# 1
f(3)#