フィボナッチシーケンスの要素を計算するために次の2つのコードを書いています。私はfib
とfib2
でシンプルなwhile
ループを使用していますpython - フィボナッチ計算時間差
def fib(n):
zero, one = 0, 1
k = 1
while k < n:
zero, one = one, zero + one
k = k + 1
return one, ls
def fib2(n, memo=None):
if memo is None:
memo = {}
if n == 1 or n == 2:
return 1
if n in memo:
return memo[n]
else:
memo[n-1] = fib2(n-1, memo)
memo[n-2] = fib2(n-2, memo)
return memo[n-1] + memo[n-2]
##import timeit
##
##print('Fibonacci 1:', timeit.timeit('fib(10000)', '''def fib(n):
## zero, one = 0, 1
## k = 1
## while k < n:
## zero, one = one, zero + one
## k = k + 1
## return one''', number=100))
##
##print('Fibonacci 2:', timeit.timeit('fib2(10000)', '''import sys; sys.setrecursionlimit(10001);
##def fib2(n, memo=None):
## if memo is None:
## memo = {}
## if n == 0 or n == 1:
## return 1
## if n in memo:
## return memo[n]
## else:
## memo[n-1] = fib2(n-1, memo)
## memo[n-2] = fib2(n-2, memo)
## return memo[n-1] + memo[n-2]''', number=100))
は同じの再帰的な実装です。しかし、fib2
が非常に遅いことが判明しました。私はそれがなぜであるか知りたい。それはfib2
がたくさんのフレームを作成するためですか? fib2
を正しく実装しましたか?
ありがとうございました。
これは、基本的にhttp://stackoverflow.com/questions/21710756/recursion-vs-iteration-fibonacci-sequence – ChatterOne
@ChatterOneの複製です。それはJavaにあります。 –
問題はありませんが、違いは再帰と繰り返しの間にあります。受け入れられた答えを注意深く読み、プログラミング言語が問題ではないことがわかります。 – ChatterOne