2010/01/05

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

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

まずはフィボナッチ数列を返す関数の基本的な実装。

def fib(n):
if n <= 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1) + fib(n-2)

# print fibonacci number 1st to 10th
for i in range(10):
print fib(i)

素朴なやりかたとして皮を一枚かぶせてみる。

def fib(n):
if n <= 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1) + fib(n-2)

def fib2(n=0):
while True:
yield fib(n)
n += 1;

fibonacci = fib2()
# print fibonacci number 1st to 10th
for i in range(10):
print fibonacci.next()

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