Возвращение списка в этой рекурсивной функции coi в python - PullRequest
2 голосов
/ 03 апреля 2010

У меня проблемы с получением моего списка для возврата в моем коде. Вместо того, чтобы возвращать список, он продолжает возвращать None, но если я заменяю return на print в выражении elif, он печатает список просто отлично. Как я могу это починить?

def makeChange2(amount, coinDenomination, listofcoins = None):
#makes a list of coins from an amount given by using a greedy algorithm
    coinDenomination.sort()
    #reverse the list to make the largest position 0 at all times
    coinDenomination.reverse()
    #assigns list
    if listofcoins is None:
        listofcoins = []
    if amount >= coinDenomination[0]:
        listofcoins = listofcoins + [coinDenomination[0]]
        makeChange2((amount - coinDenomination[0]), coinDenomination, listofcoins)
    elif amount == 0:
        return listofcoins
    else:

        makeChange2(amount, coinDenomination[1:], listofcoins)

1 Ответ

3 голосов
/ 03 апреля 2010

Вы не return указываете значение рекурсивных вызовов на makeChange2.

Как только управление достигает одного из этих вызовов на makeChange2 и завершает вызов, программа переходит к следующему оператору, который является концом функции; таким образом, он возвращает None.

Если эта концепция все еще доставляет вам проблемы, попробуйте запустить эту простую факториальную программу с ключевым словом return в строке return n*factorial(n-1) и без него:

def factorial(n):
   if n == 0 or n == 1:
       return 1
   return n * factorial(n-1)

print factorial(3)

Ручной просмотр кода должен помочь выяснить, что не так в вашей исходной программе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...