def solver(word):
#trackerCount = len(word
convertedKey = sum(bytearray(word,'utf8'))
if(len(word)>=MIN_WORD_LENGTH):
countdownLetters = wordmap.get(convertedKey)
if(convertedKey in wordmap):
for str in countdownLetters:
if sorted(word)==sorted(str) and str not in result:
result.update({str:len(str)})
if(len(word)==9 and len(result)>0):
return result
tempList = list(word)
for i in range(len(tempList)):
charTmp = tempList.pop()
wordStr =''.join(tempList)
tempList.insert(0,charTmp)
solver(wordStr)
return result
我正在使用递归函数编写倒计时字母解算器。我想完全停止调用递归 当我找到最长的字母时起作用。例如,说我通过了一个词#34;教育"解算器功能。 让我们假设,我们没有任何教育方法,现在我想检查是否有任何长度的单词(8)。 如果有长度为8的单词,我想退出函数但是如果没有8个字母的话我想要 检查7等。我只想找到最长的单词。当然如果我有多个相同的单词(长度) 作为最长的词,我希望得到它们。上面的循环找到从最大长度(9)到最小长度(5)的所有单词。
上述代码的说明: 基本上,如果我没有9个字母(最大)单词,那么我弹出最后一个元素,创建一个tempTeord(wordStr)插入charTemp(列表的最后一个元素),并调用求解器函数并删除一个字母。上面的循环找到从最大长度(9)到最小长度(4)的所有单词。 上面代码的输出在这里。 http://postimg.org/image/pgfixbglv/。请看一下,它可能更有意义。在图像中,您可以看到9个字母的单词。我希望我的递归函数在那一点返回,但如果没有9个字母,我想找8,再找不到8个字母的单词,继续到7等等。此时防止StackOverflow异常我有指定最小字长。即5。
答案 0 :(得分:0)
这里的问题出在你的终止条款中;
if(len(word)==9 and len(result)>0):
return result
这非常明确地说,只有当您从9个字母的单词中找到结果时才会停止。除非 len(word)为9,否则您将转到递归代码。
正如旧的插科打s所说,如果那不是你想要的,那就不要这样做。检查一下你是否有结果;如果是这样,那就归还吧。我无法分辨这一点是否足够,因为你还没有显示你如何管理收集通过较低循环的各种运行的所有结果(因为你需要它们),也不知道你是如何放弃的依次为9个字母中的每个字母,留下另外8个字母。