私はプログラミングが初めてで、基本的な Python を使用して Project Euler で この問題を解決しようとしていました。
基本的に、各段階で選択された最大値に基づいて再帰を使用し、リストを使用して将来の選択のために可能なオプションを維持しようとしました。
コードは短く、以下に示します。
def func(n,l):
if n<0:
return 0
if l==[1] or n==0:
return 1
else:
j=0
while l != []:
j=j+func(n-l[0],l)
del l[0]
return j
print func(200,[200,100,50,20,10,5,2,1])
たとえば、
func(5,[5,2,1])
再帰はそれをに分割します
func(0,[5,2,1]) + func(3,[2,1]) + func(4,[1])
しかし、コードは決して通らないようです。エラーがlist-index-out-of-range
発生したか、maximum-recursion-depth
エラーが発生したと表示されます (非常に小さなおもちゃのインスタンスの場合でも)。私は間違いを見つけることができません。どんな助けでも大歓迎です。