Я изучал алгоритмы и структуры данных с https://runestone.academy/runestone/static/pythonds/index.html,, и я подошел к части о динамическом программировании и классической проблеме минимального количества монет. Учитывая сумму, мы должны выяснить, каково минимальное количество монет, необходимое для превращения ее в монеты различных номиналов.
В коде, который предлагает книга для решения проблемы, есть 2 строки, роль которых я не могу понять, даже если от этого зависит моя жизнь.
Код здесь:
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, если это имеет значение ...
ура