【发布时间】:2018-11-05 22:00:35
【问题描述】:
我一直在研究https://runestone.academy/runestone/static/pythonds/index.html 的算法和数据结构,我学习了关于动态编程和经典的最小硬币数量问题的部分。给定一个总和,我们必须计算出将其兑换成不同面额的硬币所需的最少硬币数量。
在本书提出的解决问题的代码中,有两行代码我无法弄清楚它们的作用,即使我的生命依赖于它。
代码在这里:
def recMC(coinValueList,change):
minCoins = change
if change in coinValueList:
return 1
else:
for i in [c for c in coinValueList if c <= change]:
numCoins = 1 + recMC(coinValueList,change-i)
if numCoins < minCoins:
minCoins = numCoins
return minCoins
print(recMC([1,5,10,25],63))
我不明白为什么我们需要这部分:
if numCoins < minCoins:
minCoins = numCoins
return minCoins
我尝试用一条语句替换所有 3 行
return numCoins
它似乎工作得很好,除了change == 0。我不认为他们在书中写它的方式是为了“保护”免受输入 0 的影响,因为这可以更简单地处理。
他们为什么要这样写?
ps:如果重要的话,我会在 python3.5 上运行它...
干杯
【问题讨论】:
-
尝试以相反的顺序传递硬币。例如 print(recMC([25, ,5,1, 10],63))
-
感谢@chandra 的提示,它实际上给出了奇怪的结果......我现在正在尝试调试它。
-
很抱歉,我无法想象这是如何工作的……在我看来,我们正在将苹果和橙子与 numCoins
标签: python dynamic-programming coin-change