Árvore recursiva encerra a função prematuramente
Estou tentando definir uma função que retorna uma lista de todas as combinações de moedas legais que totalizam uma determinada soma. Digamos que a soma dada fosse10 e as moedas legais eram5, 2, 3. Nesse caso, a função deve retornar:
[[2, 2, 2, 2, 2], [3, 3, 2, 2], [5, 3, 2], [5, 5]]
Consegui criar uma função recursiva que me fornece o resultado correto, mas imprimindo as respostas corretas em linhas separadas e misturando váriasNone
's.
Como posso retornar a resposta correta a uma lista de soluções legais sem encerrar a função prematuramente. Eu sei que minha função é ineficaz. Eu mesmo posso pensar em algumas melhorias e as implementarei mais tarde.
Aqui está o meu código:
def count_change(tot_amount, coins, used_coins=[]):
# Sort coins and get rid of coins that are too big
if len(used_coins) == 0:
coins = [x for x in sorted(coins) if x <= tot_amount]
for coin in coins:
# If the first condition holds I want to add the printed
# statement to a list of solution instead of printing
if tot_amount - sum(used_coins) == coin:
print(used_coins + [coin])
elif tot_amount - sum(used_coins) > coin:
print(count_change(tot_amount,
[x for x in coins if x <= coin],
used_coins + [coin]))
print(count_change(10, [5, 2, 3]))
Esta é a saída:
[2, 2, 2, 2, 2]
None
None
None
None
None
None
None
[3, 3, 2, 2]
None
None
None
None
None
None
[5, 3, 2]
None
[5, 5]
None
None