Учитывая список номиналов монет и целевое значение, я пытаюсь создать рекурсивную функцию, которая сообщит мне наименьшее возможное количество монет, которое мне понадобится для получения этого значения, и затем покажет, какие монеты я 'буду нуждатьсянапример, введите монеты [1,5,10,25] и цель 6, вывод должен быть «Вам нужно 2 монеты: [1,5]» Я написал функцию, которая сообщает мне, сколько монет мне нужно, ноЯ хочу посмотреть, какой будет комбинация монет.
# USD - $1, $5, $10, etc.
currency = [1, 5, 10, 20, 50, 100]
# the amount to change - eg $6
amount = 6
cache = dict()
def recursive_change(currency, amount):
if amount in cache.keys() is not None:
return cache[amount]
# base case
if amount == 0:
return 0
result = amount+1 # initially result is just some high number
#I figure amount + 1 is fine because we'd never use more coins than the value (assuming we can't have coins worth less than one)
for coin in currency:
if coin <= amount:
result = min(result, recursive_change(currency, amount-coin) + 1)
cache[amount]=result
return result
Вот еще одна версия, которую я только что сделал - я заметил, что мое первоначальное решение плохо обрабатывало невозможные входные данные (например, заработал 6 центов, используя только никели и центы), поэтому теперь он возвращает -1 для невозможных сумм. Это немного уродливее, но я хотел бы получить некоторую информацию, чтобы сделать его лучше.
def recursive_change(currency, amount):
if amount in cache.keys():
return cache[amount]
# base case
if amount == 0:
return 0
# If we can't make the amount with this coin, return -1
if amount < 0:
return -1
result = -1
for coin in currency:
if coin <= amount:
current_result = recursive_change(currency, amount-coin)
if current_result >= 0:
if result < 0:
result = current_result
else:
result = min(current_result, result)
if result < 0:
result = -1
else:
result = result + 1
cache[amount]=result
print(cache)
return result