在python中,递归调用函数时数据结构是否保持在范围内

时间:2014-10-01 04:20:33

标签: python function recursion scope

,你好我有深度优先搜索功能。我想使用一个列表,但列表是否会通过递归调用来完成?

def depthFirstSearch(problem):
   visited = []
   movement =[]

   # test goal state
   #else search successor nodes and call depthFirstSearch on these

我可以在递归调用中访问访问者,这样我就可以看到访问过的节点,还是需要将列表作为参数传递?

此外,移动将机器人移动到下一个节点,您只需在内部添加命令并将其返回给代理。我是否需要在递归堆栈中一直返回一个列表,或者我可以在每次递归调用中简单地添加它?

1 个答案:

答案 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()