要么将信息传递给最后一个节点,因此它可以打印遇到死路时它遵循的路径,或者将遵循的路径传递回调用者,因此它可以在最后打印整个路径。
递归调用子函数并向前传递数据应该很明显......我敢说,直截了当;)
反过来,让你的递归函数接受来自其子调用的遍历节点列表——将遍历的子路径列表作为返回值。在函数结束时,如果您是子调用,则返回这些以及函数本身访问的任何节点路径(附加到其他节点的开头,如果没有进一步的深度递归,则将单个节点附加到列表中已为某些节点完成)。
最后,当您不是子呼叫时,您将获得一个完整的遍历所有路径的列表。把它们打印出来。
例如,假设您要探索字母 [AAA, ABA, ACA, ABC, ACC],并且某些路径无效(例如,您不允许在 A 之后遍历 C):
def mypathsearch(path_traversed, current_letter, remaining_letters): """获取搜索到的字母字符串、current_letter 字符和包含每个位置剩余字母组合的字符数组数组"""
if can_traverse(path_traversed, current_letter):
for next_letter in remaining_letters[0]:
letters_after = remaining_letters[1:]
sub_paths_searched = mypathsearch(
path_traversed + current_letter, next_letter, letters_after
)
else:
# end of the line
print_path_traversed(path_traversed)