我正在学习python中的数据结构和算法。这是递归的经典问题,涉及用最少的硬币进行更改。这是代码。
我不明白的是第2行。为什么我们需要minCoins = change
?第8-9行是什么意思?任何人都可以解释一下吗?非常感谢你的帮助!
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))
答案 0 :(得分:1)
minCoins = change
:minCoins
初始化为change
,这是recMC
可以返回的最大值,因为硬币的最小值为1,假定为整数硬币的价值。
if change in coinValueList: return 1
:基本情况1 - 如果某个硬币的值为change
,我们只需要抓住这1个硬币,然后返回1
for i in [c for c in coinValueList if c <= change]:
:
然后该函数循环遍历1个单个硬币的所有可能值
numCoins = 1 + recMC(coinValueList,change-i)
:从i
中扣除硬币值change
,将1个硬币加到所需的硬币数量上,这是为剩余的更改(change-i
)递归计算的。这可以从 2 基本情况
if numCoins < minCoins: minCoins = numCoins
有效地将最小数量的硬币分配给minCoins
如果change
仍然具有minCoins
的初始值(意味着c
中没有值coinValueList
满足c <= change
),则表示硬币数量还需要change
的值,即change
1单位硬币。这是基础案例2,它基于具有值1的硬币始终可用的前提条件。