,你好我有深度优先搜索功能。我想使用一个列表,但列表是否会通过递归调用来完成?
def depthFirstSearch(problem):
visited = []
movement =[]
# test goal state
#else search successor nodes and call depthFirstSearch on these
我可以在递归调用中访问访问者,这样我就可以看到访问过的节点,还是需要将列表作为参数传递?
此外,移动将机器人移动到下一个节点,您只需在内部添加命令并将其返回给代理。我是否需要在递归堆栈中一直返回一个列表,或者我可以在每次递归调用中简单地添加它?
答案 0 :(得分:0)
这可能不是最好的解决方案,但它是一个解决方案:
def depthFirstSearch(problem, visited=[], movement=[]):
# Your code here...
参数在函数声明中初始化,并将持续到执行结束。递归调用可以访问列表,即使它的父级更改了这些参数的本地值(如果你没有覆盖调用中的参数,显然也是如此)。
如果您只调用此函数一次(不计算递归调用),您可以这样做,否则您可以在函数定义之外定义此列表,还可以定义包装函数,例如:
visited = []
movement = []
def depthFirstSearch(problem):
visited.clear()
movement.clear()
recursiveSearch(problem)
def recursiveSearch(problem):
visited.append(something)
recursiveSearch(something_else)
# More code...
movement.etc()