私はフィボナッチ級数を再帰的に行う方法を知っています。それは非常に簡単です:
def F(n):
if n == 1 or n == 2:
return 1
else:
return k * F(n-2) + F(n - 1)
ただし、同じ値を何度も計算する必要があるため、これは非常に非効率的であることはわかっています。これを回避する方法は、何らかの形で値を保存することです。20 番目の値が必要だとします。F(13) が何であるかを計算したら、その値を保存して直接呼び出すことができます。すべての再帰レベルを調べて同じ答えを得る必要はありません。
辞書は、この問題に対する明白な解決策です。ただし、辞書に関する私の答えは機能しません。
U = {1:1, 2:1}
def F(n):
global U
if n in U:
return U[n]
else:
U[n] = F(n - 2) + F(n - 1)
このコードが実行されたら、U[n] を表示するだけです。
ロジックを何度も実行しましたが、すべて問題ないように見えますが、次のエラーが発生し続けます。
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
a がどのように返されるべきかはわかりませんNone
が、問題の原因となっている辞書に関する何らかのニュアンスが欠けている可能性があることは認めます。