天天看點

Python小練習 - 斐波那契數列

斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為"兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……。這個數列從第3項開始,每一項都等于前兩項之和。

下面分享兩個方法證明小兔紙的繁殖能力有多強(小兔紙的繁殖周期與斐波那契數列一緻):

方法一:疊代實作

def fibonacci(n):
    n1 = 1
    n2 = 1
    n3 = 1

    if n < 1:          # 輸入錯誤的情況,傳回0
        print("輸入錯啦!")
        return 0

    while (n-2)>0:
        n3 = n2 + n1
        n1 = n2
        n2 = n3
        n -= 1
    return n3:

num = int(input("請輸入月份n:"))
result = fibonacci(num)
if result:                # 當傳回值為非0,result為True
    print("總共有 %d 對小兔兔誕生!!!" % result)
           

方法二:遞歸實作

def fab(n):
    if n < 1:
        print("輸入有誤!")
        return 0
    if n == 1 or n == 2:
        return 1
    else:
        return fab(n-1) + fab(n-2)

num = int(input("請輸入月份n:"))
result = fab(num)
if result:
    print("總共有%d對小兔紙!!!" % result)
           

方法三:利用元組進行交換

def Fib(n):
    a,b = 1,1
    for i in range(n-1):   # 當n = 0時,不執行for循環中的内容
        a, b = b, a+b
    return a

num = int(input("輸入月份:"))
print("第 %d 個月有 %d 對兔子" % (num, Fib(num)))