Pythonのジェネレータでフィボナッチ数列を出力
借り物のみんなのPython読んでる。
イテレータとジェネレータの解説読んでて、今までろくに使ったことなかったなと思い少しコードを書いてみた。
書籍ではサンプルコードとして素数を順々に出力するジェネレータ関数が書かれているので、それを参考にフィボナッチ数列を順番に出力する関数を書いてみた。
def get_fibo_gen(): x,y,cnt = 1,1,0 while True: if cnt == 0 or cnt == 1: yield 1 else: x,y = y,x+y yield y cnt += 1 if __name__ == '__main__': i = get_fibo_gen() for cnt in range(20): print i.next(), #=> 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
バカ正直に書いてみたけど、cntなんて変数、いらなくね?やり直し。
def get_fibo_gen(): x,y = 1,1 yield x yield y while True: x,y = y,x+y yield y if __name__ == '__main__': i = get_fibo_gen() for cnt in range(20): print i.next(), #=> 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
ちょっとすっきり。
だけど、これじゃ必ず初項からしか出力できないね。そこは呼び出す側で調整すればいいのか。