对于一门课程,我正在制作一个必须涉及递归的程序。这就是我到目前为止所做的:
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
?如何将其保留为整数?
答案 0 :(得分:2)
如果while循环没有被entereed(在你的例子中基本上是if语句),请记住返回一些东西:
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")
答案 1 :(得分: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)