1

次の例は、Allen Downey の本「Think Python」からのものです。辞書における「メモ」の概念を説明する際に、彼は次の例を引用しています。

known = {0:0, 1:1}
def fibonacci(n):
    if n in known:
        return known[n]
    res = fibonacci(n-1) + fibonacci(n-2)
    known[n] = res
    return res
fibonacci(5)
print known

{0:0, 1:1, 5:5}1 から 5 までの各値の関数を計算する反復が見られないため、このコードが返されることを期待していました{0: 0, 1: 1, 2: 1, 3: 2, 4: 3, 5: 5}。関数res = fibonacci(n-1) + fibonacci(n-2)が n=2、n=3、n=4 の式を計算した理由がわかりません。

誰かが私にこれを説明してもらえますか? 本の説明がよくわかりません。

4

2 に答える 2

0

ご覧のとおりfibonacci、再帰関数です。つまり、関数内で自分自身を呼び出します。

たとえば、 を考えてみましょうfibonacci(2)2known辞書にないため、res = fibonacci(1)+fibonacci(0)実行されます。0とは既知であるため1、その値 (0 と 1) をressoと 2 に追加すると、辞書にも追加され、res=15に達するまで続きます。fibonacci(2) = 1known

于 2016-01-16T22:36:36.330 に答える