2013-11-19 4 views
-1

Для курса я делаю программу, которая должна включать рекурсию. Это то, что я до сих пор:Проблема с Python с программой, включающей рекурсию

def words(letters, start, word): 
    while (start) < (len(letters)): 
     word = word + letters[start] 
     print(word) 
     letters = letters.replace(letters[start], "") 
     start = (words(letters, start, word)) 
     return (start + 1) 

Целью программы является принять список букв и вывести все возможные комбинации этих букв. Я не уверен, что программа будет работать, но до этого у меня возникает другая проблема. Когда я запускаю это с помощью базовой команды, например.

words("abcd", 0, "") 

(0 и "" только для запуска от команды, поскольку они необходимы в будущем). Но когда я запускаю это, он выводит ab abc abcd, но затем останавливается с ошибкой, ссылаясь на возврат строки (start + 1), говоря, что start не является целым числом, а None type. Когда началось становление None type? И как я могу сохранить его как целое число?

ответ

2

Не забудьте вернуть что-то, если петля в то время не получает entereed (что в принципе, если заявление в вашем примере):

def words(letters, start=0, word=""): 
    if start < len(letters): 
     word = word + letters[start] 
     print(word) 
     letters = letters.replace(letters[start], "") 
     start = words(letters, start, word) 
     return start + 1 
    else: 
     return 0 

Также я установил некоторые значения по умолчанию, так что вы можете сделать это:

words(letters="abcd") 
+0

Проблема с, если утверждение, что каждый уровень должен быть запущен через несколько раз для вывода каждого из вариантов, например, слово может начинаться с a, b, c или d, но если вы используете оператор if, выводится только «abcd». – user2832964

+0

@ user2832964 Ваш пример - это оператор 'if'. Он возвращается на первую итерацию. – qwertynl

2

return Когда вы, вы возвращаете int. Однако вы делаете это только внутри цикла while, то есть когда start < len(letters). Если это условие не выполняется, ваша функция ничего не возвращает, т. Е. NoneType.
Вот почему в вашей петле while start становится NoneType, что приводит к вашей ошибке.

Вы могли бы сделать что-то вроде этого:

def words(letters, soFar=''): 
    if not letters: 
    print(soFar) 
    else: 
    for i,char in enumerate(letters): 
     words(letters[:i]+letters[i+1:], soFar+char) 
Смежные вопросы