El árbol recursivo termina la función prematuramente

Estoy tratando de definir una función que devuelva una lista de todas las combinaciones de monedas legales que suman una suma dada. Digamos que la suma dada fue10 y las monedas legales eran5, 2, 3. En ese caso, la función debería devolver:

[[2, 2, 2, 2, 2], [3, 3, 2, 2], [5, 3, 2], [5, 5]]

He logrado crear una función recursiva que me da el resultado correcto, pero imprimiendo las respuestas correctas en líneas separadas y mezclando en un montón deNone's.

¿Cómo puedo devolver la respuesta correcta a una lista de soluciones legales sin terminar la función prematuramente? Sé que mi función es ineficaz. Puedo pensar en algunas mejoras y las implementaré más adelante.

Aquí está mi 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 es la salida:

[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

Respuestas a la pregunta(1)

Su respuesta a la pregunta