Я начинаю писать и понимать проблему обмена монет и не мог получить интуицию, поэтому я начал писать решение методом грубой силы. Я хочу понять решение грубой силы, прежде чем переходить к мемоизации.
coins = [2, 3, 7]
change = 12
def coin_change(c):
print(c)
if c <= 0:
return 0
else:
for i in coins:
if c - i >= 0:
coin_change(c - i)
coin_change(change)
Он распечатывает пару оставшихся изменений, но я не знаю, как сохранить каждый путь в массиве.
Я также хочу понять, как можно использовать рекурсию для отслеживания пути. Я могу подумать о добавлении дополнительного аргумента в coin_change
, но, возможно, есть альтернативный способ.
Меня смущает его сложность. На каждом шагу вызывается определенное количество монет, но многие онлайн-ресурсы упоминают, что это 2n.
Редактировать: обратите внимание, что количество монет не ограничено, ответ 4.
[2, 2, 2, 2, 2, 2]
[3, 3, 3, 3]
[2, 2, 2, 3, 3]
[2, 3, 7]