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