使用python递归进行单词词典搜索
我必须做一个函数:使用python递归进行单词词典搜索,python,search,recursion,Python,Search,Recursion,我必须做一个函数: def allPaths(input,destination,num): 它的输入是字典中的一个单词,目的地也是字典中的一个单词。num是必须从输入到目标的递归调用数 def oneLetterDiff(word): 这将返回字典中的所有单词(列表),这些单词在任何索引字符串中都有一个字母的偏移。它已经被写下来并开始工作了 我如何获得AllPath以递归方式搜索所有OneLetterDiff(及其返回的列表)的次数(以num指定)?如果找到目的地,它必须返
def allPaths(input,destination,num):
它的输入是字典中的一个单词,目的地也是字典中的一个单词。num是必须从输入到目标的递归调用数
def oneLetterDiff(word):
这将返回字典中的所有单词(列表),这些单词在任何索引字符串中都有一个字母的偏移。它已经被写下来并开始工作了
我如何获得AllPath以递归方式搜索所有OneLetterDiff(及其返回的列表)的次数(以num指定)?如果找到目的地,它必须返回到达目的地所用的单词(又名路径)
当前代码:
def wordPath(word, dest, times):
path = []
offOne = oneLetterDiff(word)
if times > 0:
if word == dest:
path.append(word)
return path
return path
谢谢
劳埃德首先,你必须写你的基本情况。您已经知道如何执行此操作:
def wordPath(word, dest, times):
if times == 0:
return []
if word == dest:
return [word]
您还知道要进行哪些递归调用:
offones = oneLetterDiff(word)
for offone in offones:
result = wordPath(offone, dest, times-1)
??? something with each result ???
??? something if you run out of results to try ???
因此,您必须弄清楚如何处理结果。答案取决于你得到的结果。这将是一个路径,一个单词列表。但是你知道一个空列表意味着失败,一个单词列表意味着一条路的尽头;你只需要弄清楚如何从那里构建
如果它返回一个空列表,这意味着没有通过offone
的路径。但这并不意味着没有通过word的路径;只有当您到达列表的末尾,并且所有的代码都返回了[]
时,您才会知道这一点。因此,在本例中继续下一个循环
如果它返回[dest]
(当然,这也与[offone]
相同),这意味着从word
到dest
的路径就是[word,dest]
。所以,这就是你的回报
如果它返回了其他东西,比如[offone,dest]
,那么您就知道它成功了。那么,在这种情况下,从word
到dest
的路径是什么?这就是你的回报
如果你明白了这一点,你就差不多完成了。如果你理解了递归的基本思想,但想不起如何开始:基本情况显然是当input==destination
时,在这种情况下,你只需返回num
。那么,如果这不是真的,你如何将问题减少到一个或多个单词之间差异较小的呼叫?(如果你不理解递归的基本思想,你需要去其他地方学习;没有人可以用这样的答案来教你。)当前代码已经添加到postOK中,首先,如果times==0
,该怎么办?第二,如果times>0
但是word!=目的地
?在这里,您需要将问题简化为对wordPath
的一个或多个调用。给定word
、dest
、times
和offOne
,您可以对wordPath
进行哪些调用来帮助您?如果times==0:返回路径