使用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:返回路径