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....

フィボナッチ数列の次の数は、前の 2つの数の合計であり、数学的に Fn = Fn-1 + Fn-2 として表示できます。

シリーズの最初の要素と 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