我必须做一个功能:
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
谢谢!
劳埃德
答案 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]
相同),则表示从word
到dest
的路径只是{{1 }}。那么,这就是你的回报。
如果它返回了其他内容,例如[word, dest]
,那么你知道它成功了。那么,在这种情况下,从[offone, <some other word>, dest]
到word
的路径是什么?这就是你的回报。
如果你弄清楚了,那你就已经完成了。