解答例_4_9

解答例:練習問題_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),

タイトルとURLをコピーしました