【发布时间】:2021-12-21 18:42:45
【问题描述】:
我可以问一个关于 Python 递归的问题吗?我想检查一下这背后的逻辑,为什么它能够不断更新结果?
问题: 构造 DFS 递归以附加满足指定条件的所有子节点,例如,如果节点的结束指示符为 True,我们将将此节点添加到数组中。此递归将在另一个函数中使用。
- 我的代码:
def dfs(self, level, ls):
# if we meet the end of a level, this level’s information will be added to the returned list
if level.end:
ls.append(level.info)
# go further to explore this level’s children, even an end is met.
for c in level.child:
ls = self.dfs(level.child[c], ls)
return ls
DFS 将被调用:
ls = self.dfs(self.curr, [])
层级是自定义的Trie:
class Trie:
def __init__(self):
self.child = collections.defaultdict(Trie)
# self.child = {}
self.end = False
self.w = ''
self.f = 0
我不确定为什么这个 ls 会在每次 for 循环迭代中得到更新,然后传递到下一次迭代。我也很惊讶,以下代码也可以工作:
for c in level.child:
self.dfs(level.child[c], ls)
不返回ls。我不确定为什么会这样?
提前感谢您的帮助。
最好的,
朴素的 Python 学习者
【问题讨论】:
-
level.child[c]是字典吗?请包括该定义的类。我不确定我是否完全理解了您的问题,但请注意ls正在就地修改,因此ls = self.dfs(level.child[c], ls)只是将ls重新分配给自己。 -
是的,你是对的。我将把课程包括在这里。谢谢。
-
@joseville 这里的问题是
ls = self.dfs会自行更新。但是为什么self.dfs不赋值也会更新ls?谢谢。
标签: python recursion depth-first-search