Á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

questionAnswers(1)

yourAnswerToTheQuestion