Em vários dos testes que fiz com a minha função, a lista devolvida é gerada de maneira que haja várias listas dentro de listas.
Hmmm.
A chamada recursiva retorna uma lista de trocos:
[ troco[0], troco[1], troco[2] ]
Depois disso, a função deve, mais ou menos, fazer append(troco[0]), append(troco[1]), ... na lista que a chamada corrente está contruindo para ser retornada.
A função não deve fazer append([ troco[0], troco[1], ...]).
Em geral, a cara de uma função que cria e retorna uma lista é
def f(...):
'''(...) -> list
Recebe ... e cria e retona uma lista.
'''
lista = []
[ ... constroi a lista ...]
return lista
Por exemplo,
def clone_lista(objetos):
'''(list) -> list
Recebe uma lista objetos e cria e retona um clone
(= cópia) da lista.
'''
# crie lista vazia
clone = []
# construa a lista
for item in objetos:
clone.append(item)
# retorne a lista
return clone
Equivalentemente
def clone_lista(objetos):
'''(list) -> list
Recebe uma lista objetos e cria e retona um clone
(= cópia) da lista.
'''
# crie lista vazia
clone = []
n = len(objetos)
# construa a lista
for i in range(n):
clone.append(objetos[i])
# retorne a lista
return clone