用迭代和递归方式分别写一个兔子生育的python程序(斐波那契数列)

问题:

有一对兔子出生,从第三月起,每个月生一对兔子,出生的兔子也是第三月起每个月生一对兔子,请问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))
    

差别:迭代算法效率比递归算法效率高,递归思路更加直接体现问题写法。

你可能感兴趣的:(python,算法)