问题:
有一对兔子出生,从第三月起,每个月生一对兔子,出生的兔子也是第三月起每个月生一对兔子,请问n年后,共有多少只兔子?
月份 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | … | n |
---|---|---|---|---|---|---|---|---|---|---|---|---|
数量(对) | 1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 | 55 | … | F(n-2)+F(n-1) |
思路:前2个月兔子对数都是1对,从第三个月开始兔子的对数是前面2个月兔子对数之和
F(1)=F(2)=1
F(n)=F(n-2)+F(n-1)
利用递归的方法:
def F2(temp):
if temp<1:
print("输入有误!")
return -1
if (temp==1 or temp==2):
return 1
else:
return F2(temp-2)+F2(temp-1)
temp=int(input("请输入一个正整数:"))
result=F2(temp)
print("%d个月后,有%d对小兔子"%(temp,result))
利用迭代的方法:
def F1(n):
n1=1
n2=1
n3=1
if n<1:
print("输入有误!")
return -1
while (n-2)>0:
n3=n2+n1
n2=n3
n1=n2
n-=1
return n3
n=int(input("请输入一个正整数:"))
result=F1(n)
if result!=-1:
print("%d个月后,总共有%d对小兔子!"%(n,result))
差别:迭代算法效率比递归算法效率高,递归思路更加直接体现问题写法。