目標額とコインの種類のリストが与えられた場合、私のコードは、目標額に到達するために必要な最小のコインを見つけることになっています。
例:
C(78, [1, 5, 10, 25, 50]) = 6
- 253x + 3xから 78 を作ることができる1ので、6 コインが必要です。
C(48, [1, 7, 24, 42]) = 2
- 48 = 2x24なので、2 コインで十分です。
C(35, [1, 3, 16, 30, 50]) = 3
- 162x + 1xから 35 を作ることができる3ので、コイン 3 枚で十分です。
for ループでコードを作成しましたが、再帰的にするにはどうすればよいですか?
def C(i, coins, cdict = None):
if cdict == None:
cdict = {}
if i <= 0:
cdict[i] = 0
return cdict[i]
elif i in cdict:
return cdict[i]
elif i in coins:
cdict[i] = 1
return cdict[i]
else:
min = 0
for cj in coins:
result = C(i - cj, coins)
if result != 0:
if min == 0 or (result + 1) < min:
min = 1 + result
cdict[i] = min
return cdict[i]