Я пытаюсь реализовать программу «разделяй и властвуй», которая при наличии набора монет c = {c0, c1,...,cn} и суммы A находит, сколько различных способов можно заплатить A, а также как много раз функция рекурсивно выполнялась.
Моя мысль состоит в том, чтобы сделать что-то вроде этого:
callsMade = 0
coins = [1,5,10,25]
def makeChange(A, c):
global callsMade
callsMade += 1
if(A == 0):
return 1
if(A < 0):
return 0
combos = 0
for i in range(len(coins)):
combos += makeChange(A - coins[i], i)
return combos
Где A — передаваемая сумма, а c = len(coins)-1. Однако этот фрагмент кода ведет себя не так, как я ожидал. Мой мыслительный процесс состоит в том, чтобы перебрать массив монет, вычитая текущую сумму на монету в этой позиции массива и рекурсивно вызывать функцию makeChange с меньшей суммой и следующей монетой в массиве, а затем увеличивать глобальные вызовы, сделанные на 1 каждый время.
Используя набор монет = [1,5,10,25] и сумму A = 200, количество комбинаций должно быть 1463 при примерно 1500 вызовах.
coins[I]
меньше A? - person doctorlove   schedule 09.05.2019c
? Он не используется. - person MisterMiyagi   schedule 09.05.2019