Python再帰とジェネレーターはそれぞれフィボナッチ数列を実装します

フィボナッチ数列黄金分割数列とも呼ばれ、ウサギ数列とも呼ばれます
ここに画像の説明を挿入

素人の用語では、シーケンスの3番目の項目から開始して、後続の各数値の値は最初の2つの数値の合計に等しくなります。
ここに画像の説明を挿入

そして、Pythonを介してさまざまな長さのフィボナッチ数列をどのように実装しますか?
一般的な実装方法は、再帰とジェネレーターです。

再帰

再帰的方法は効率が低く、多くの繰り返し計算が発生します。ここでは、例として20個のフィボナッチ数を取り上げます。

def fbnq_one(self):
    if self == 1:
        return 1
    elif self == 2:
        return 2
    else:
        return fbnq_one(self - 2) + fbnq_one(self - 1)


print([fbnq_one(i) for i in range(1, 21)])

ここに画像の説明を挿入

ビルダー

ジェネレーターはメソッドでyieldを使用する必要があります。ジェネレーターは要素を取得するためにトラバースできる反復可能なオブジェクトです。より多くのフィボナッチ数列を取得する場合、再帰よりも効率的です。ここでは、100個のフィボナッチ数列を例として使用します。

def fbnq_two(max_num):
    a, b = 0, 1
    time_num = 0
    while time_num < max_num:
        yield a
        a, b = b, a+b
        time_num += 1


print([i for i in fbnq_two(100)])

ここに画像の説明を挿入

比較する

再帰的な構文は単純ですが、実行時には多くの繰り返し計算が行われ、値が大きいと実行時間が長くなります。
ジェネレーターは要素を取得するためにトラバースできます。より多くのフィボナッチ数列を取得する場合は、再帰的よりも効率的です。実行時間は比較的高速です。

おすすめ

転載: blog.csdn.net/JasonZ227/article/details/112238104