在你提供的代码中,`min_coins` 变量的使用方式是不正确的。你没有在遍历过程中正确地更新 `min_coins`。你应该在找到更小的硬币数量时更新 `min_coins`。以下是修改后的代码:
def money(ownmoney, moneylist, knownlist):
if ownmoney in moneylist:
knownlist[ownmoney] = 1
return 1
elif knownlist[ownmoney] > 0:
return knownlist[ownmoney]
else:
min_coins = float('inf') # 初始化最小硬币数为正无穷
for each in [c for c in moneylist if c <= ownmoney]:
numbercoin = 1 + money(ownmoney - each, moneylist, knownlist)
if numbercoin < min_coins:
min_coins = numbercoin # 更新最小硬币数量
knownlist[ownmoney] = min_coins # 将最小硬币数存储在knownlist中
return min_coins
在这个修改后的代码中,我们在遍历过程中使用 `min_coins` 变量来存储当前找到的最小硬币数量。当我们找到一个更小的硬币数量(`numbercoin`)时,我们将 `min_coins` 更新为这个更小的值。这样,在遍历结束时,`min_coins` 将包含整个递归过程中找到的最小硬币数量。
在你提供的错误代码中,你直接将 `numbercoin` 的值赋给了 `min_coins`,而没有进行比较。这意味着 `min_coins` 变量实际上没有起到存储最小硬币数量的作用。因此,你得到的结果可能是错误的。
总之,正确使用 `min_coins` 变量可以确保你在整个递归过程中找到最小的硬币数量。在你提供的错误代码中,由于没有正确地使用 `min_coins` 变量,你可能得到错误的结果。 |