二重再帰を末尾再帰に変更しろと友達から教えてもらった。
def fib(cnt, result, num):
if 1 > n:
return result
fib(cnt - 1, result + num, result)
>>>fib(10)
89
>>>fib(20)
10946
おーめっちゃ速くなった。
ってかPythonチュートリアルにも載ってるじゃないですか!
しかもPythonっぽい書き方が。
def fib(cnt):
result, num = 1, 1
for i in range(cnt):
result, num = num, result + num
return result
こっちの方が速いです。