使用python递归的单词字典搜索

时间:2014-11-21 20:39:40

标签: python search recursion

我必须做一个功能:

    def allPaths(input,destination,num):

它输入是字典中的一个单词,目的地也是字典中的一个单词。 num是您必须从输入到目标的递归调用的数量。

    def oneLetterDiff(word):

这将返回字典中所有字符串(列表)中的任何字符串索引中的一个字母。它已经编写并且有效。

如何让allPaths以递归方式搜索所有OneLetterDiff(以及它返回的列表)num中指定的次数?如果找到了目的地,它必须返回到达目的地所用的单词(也就是路径)。

当前代码:

    def wordPath(word, dest, times):
        path = []
        offOne = oneLetterDiff(word)


        if times > 0:
            if word == dest:
                path.append(word)
                return path

    return path

谢谢!

劳埃德

1 个答案:

答案 0 :(得分:0)

首先,您必须编写基本案例。您已经知道如何执行此操作:

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 ???

所以,你必须弄清楚你想对result做些什么。答案取决于你得到的结果。它将成为一条道路 - 一个单词列表。但是你知道空列表意味着失败,而单字列表意味着路径的结束;你只需要弄清楚如何从那里建立。

如果它返回一个空列表,则表示没有通过offone的路径。但这并不意味着word没有路径;您只知道如果到达列表的末尾,并且所有都返回[]。所以,在这种情况下继续下一个循环。

如果它返回[dest](当然也与[offone]相同),则表示从worddest的路径只是{{1 }}。那么,这就是你的回报。

如果它返回了其他内容,例如[word, dest],那么你知道它成功了。那么,在这种情况下,从[offone, <some other word>, dest]word的路径是什么?这就是你的回报。

如果你弄清楚了,那你就已经完成了。