フィボナッチ数列を生成するやり方はいく通りか考えられると思います。
例えばリストの最後の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 さんご指摘ありがとうございました👏