2010/01/05

Pythonとジェネレータとフィボナッチ数列

実行するたびにフィボナッチ数列をひとつずつ返す。そんな関数を実装したい。

まずはフィボナッチ数列を返す関数の基本的な実装。
  1. def fib(n):  
  2.     if n <= 0:  
  3.         return 0  
  4.     elif n == 1:  
  5.         return 1  
  6.     else:  
  7.         return fib(n-1) + fib(n-2)  
  8.    
  9. # print fibonacci number 1st to 10th  
  10. for i in range(10):  
  11.     print fib(i)  

素朴なやりかたとして皮を一枚かぶせてみる。
  1. def fib(n):  
  2.     if n <= 0:  
  3.         return 0  
  4.     elif n == 1:  
  5.         return 1  
  6.     else:  
  7.         return fib(n-1) + fib(n-2)  
  8.    
  9. def fib2(n=0):  
  10.     while True:  
  11.         yield fib(n)  
  12.         n += 1;  
  13.    
  14. fibonacci = fib2()  
  15. # print fibonacci number 1st to 10th  
  16.    for i in range(10):  
  17.     print fibonacci.next()  

とりあえず当初の目的は達成されたものの、あまり琴線に触れるコードじゃないな。
しかしPythonは書きやすくていいな。