Python 中的斐波那契數列

Manav Narula 2023年1月30日
  1. 在 Python 中使用數學公式建立斐波那契數列
  2. 在 Python 中使用 for 迴圈建立斐波那契數列
  3. 在 Python 中使用遞迴函式建立斐波那契序列
  4. 在 Python 中使用動態程式設計方法建立斐波那契序列
Python 中的斐波那契數列

斐波那契數列是數學中一個常見且經常使用的序列。如下所示。

0,1,1,2,3,5,8,13,21,34,55,89,144,229....

斐波那契數列中的下一個數字是前兩個數字的和,可以用數學方式顯示為 Fn = Fn-1 + Fn-2

系列的第一個和第二個元素分別是 0 和 1。

在本教程中,我們將討論如何在 Python 中建立這樣的序列。

在 Python 中使用數學公式建立斐波那契數列

斐波那契數列中的每個元素都可以使用以下數學公式表示。

斐波那契方程

我們可以在 Python 中實現此公式,以找到序列,直到所需的數字,並列印序列。請參考以下的程式碼。

from math import sqrt


def F(n):
    return ((1 + sqrt(5)) ** n - (1 - sqrt(5)) ** n) / (2 ** n * sqrt(5))


def Fibonacci(startNumber, endNumber):
    n = 0
    cur = F(n)
    while cur <= endNumber:
        if startNumber <= cur:
            print(cur)
        n += 1
        cur = F(n)


Fibonacci(1, 100)

輸出:

1.0
1.0
2.0
3.0000000000000004
5.000000000000001
8.000000000000002
13.000000000000002
21.000000000000004
34.00000000000001
55.000000000000014
89.00000000000003

Fibonacci() 函式用於計算序列中某個位置的斐波那契數。

在 Python 中使用 for 迴圈建立斐波那契數列

我們將使用 for 迴圈建立一個函式以實現所需的序列。在這種方法中,我們將列印所需長度的序列。我們將僅使用 for 迴圈來迭代所需的長度,並在每次迭代時更改所需的變數。下面的程式碼解釋瞭如何操作。

def fibonacci_iter(n):
    a = 1
    b = 1
    if n == 1:
        print("0")
    elif n == 2:
        print("0", "1")
    else:
        print("0")
        print(a)
        print(b)
        for i in range(n - 3):
            total = a + b
            b = a
            a = total
            print(total)


fibonacci_iter(8)

輸出:

0
1
1
2
3
5
8
13

在 Python 中使用遞迴函式建立斐波那契序列

遞迴函式是一個呼叫自身的函式,此類方法可以減少時間複雜度,但使用更多的記憶體。我們可以建立一個函式來返回斐波那契數,並使用 for 迴圈列印所需的序列。

例如,

def rec_fib(n):
    if n > 1:
        return rec_fib(n - 1) + rec_fib(n - 2)
    return n


for i in range(10):
    print(rec_fib(i))

輸出:

0
1
1
2
3
5
8
13
21
34

在 Python 中使用動態程式設計方法建立斐波那契序列

動態程式設計是一種將問題分為子問題並儲存這些子問題的值以找到解決方案的方法。此方法通常用於優化問題,可用於生成斐波那契數列,如下所示:

def fibonacci(num):
    arr = [0, 1]
    if num == 1:
        print("0")
    elif num == 2:
        print("[0,", "1]")
    else:
        while len(arr) < num:
            arr.append(0)
        if num == 0 or num == 1:
            return 1
        else:
            arr[0] = 0
            arr[1] = 1
            for i in range(2, num):
                arr[i] = arr[i - 1] + arr[i - 2]
            print(arr)


fibonacci(10)

輸出:

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

請注意,此方法將序列儲存在陣列中。

作者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

相關文章 - Python Math