LoginSignup
8
6

More than 5 years have passed since last update.

[Python] フィボナッチ数列をジェネレータで生成

Last updated at Posted at 2017-07-18

フィボナッチ数列を生成するやり方はいく通りか考えられると思います。
例えばリストの最後の2項を足してappendするとか、再帰的なメソッドで生成するとか。
ただ、シンプルさと利用シーンを考えたときに、イテレータとして取り出せる方がいいよねと思い立ち、再帰的なジェネレータを使って定義できるんじゃないかということで、書いて見ました。

fibonacci.py
def fibonacci(n):
    fibo = fibonacci(n-1)
    for i in range(n):
        if i <= 1:
            result = i
            yield result
        else:
            previous = next(fibo)
            result = result + previous
            yield result

利用例

>>> for i in fibonacci(10): print(i, end=' ')
...
0 1 1 2 3 5 8 13 21 34

>>> [ i for i in fibonacci(15) ]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]

と思ったら、再帰を使わないもっとシンプルな方法ありました。

fibonacci.py
def fibonacci(n):
    a, b = 0, 1
    for _ in range(n):
        yield a
        a, b = b, b+a

@shiracamus さんご指摘ありがとうございました👏

8
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6