解答例:練習問題_4_9 ジェネレータ関数 フィボナッチ数
n 番目から順番にのフィボナッチ数を戻す関数ですが、n 番目を計算するためには最初から数列を計算する必要があります。従って for 又は while のループ文を使って最初から n + size までを計算するコードを作成し、n 回目以降に yield 文で一つずつ呼び出しできる様にします。
解答例としては、for 文と while 文の2例を掲載します。
def fibo_g(n, size = 10):
# n 番目のフィボナッチ数
i, a, b = 1, 1, 1
while n - i + size:
if n - i < 1:
yield a, i
else:
pass
a, b = b, a + b
i += 1
def fibo_g(n, size = 10):
# n 番目のフィボナッチ数
a, b = 1, 1
for i in range(1, n + size):
if n - i < 1:
yield a, i
else:
pass
a, b = b, a + b
上記の else ~ pass の2行は省略しても構いません。
以下の様に for 文や next 関数を使用して確認できます。
for x, i in fibo_g(1):
print('({}, {})'.format(x, i), end=', ')
(1, 1), (1, 2), (2, 3), (3, 4), (5, 5), (8, 6), (13, 7), (21, 8), (34, 9), (55, 10),
g = fibo_g(10, 7)
while True:
try:
print(next(g), end=', ')
except StopIteration:
break
(55, 10), (89, 11), (144, 12), (233, 13), (377, 14), (610, 15), (987, 16),