提问人:유한정 提问时间:11/8/2023 更新时间:11/8/2023 访问量:22
递归函数的工作原理
The working principle of a recursive function
问:
亲爱的,
提前谢谢你。
我的问题是关于DFS算法的。
我的代码和结果如下。
- 法典
graph = [
[],
[2,3,8],
[1,7],
[1,4,5],
[3,5],
[3,4],
[7],
[2,6,8],
[1,7]
]
visited = [False]*9
def dfs(graph, v, visited):
visited[v] = True
#print(v, end='')
for i in graph[v]:
print("i:",i,"v:",v)
if not visited[i]:
print("no")
dfs(graph,i,visited)
- 结果
i: 2 v: 1
no
i: 1 v: 2
i: 7 v: 2
no
i: 2 v: 7
i: 6 v: 7
no
i: 7 v: 6
i: 8 v: 7
no
i: 1 v: 8
i: 7 v: 8
i: 3 v: 1
no
i: 1 v: 3
i: 4 v: 3
no
i: 3 v: 4
i: 5 v: 4
no
i: 3 v: 5
i: 4 v: 5
i: 5 v: 3
i: 8 v: 1
- 我的问题
我不明白“访问所有连接节点后返回父节点的过程”。例如,节点 6 只有一个连接的节点,即 7,既然我们已经探索了 7,那么它不应该在不执行 'if not visited[i]' 下的语句的情况下结束吗?我预计探索会在达到 1-2-7-6 (i: 7 v: 7) 后完成,但结果与我的猜测不同。我不确定为什么会显示下一个输出。
答:
0赞
JonSG
11/8/2023
#1
当您访问节点 6 并将您引导至已访问的节点 7 时,该调用将结束。但是,something called 和 that something 是先前调用的循环。现在,for循环将继续下一个要检查的项目,依此类推......dfs(graph, 6, visited)
dfs(graph, 6, visited)
for
dfs(graph, 8, visited)
使用调试器单步执行代码使其更易于理解。如果您这样做,我建议将手表设置为:
v
i
visited[v]
visited[i]
graph[v]
上一个:Flutter 图像分层
评论