2025-11-18 07:03:23
DFS需要栈结构跟踪路径,如果循环检测不好就会无限循环导致崩溃。比如处理有环的图时,栈里路径没及时清空,就会重复访问同一个节点,程序跑不下去。现在很多编程语言都有限制,比如Python默认递归深度1000层,超过就报错。
因为DFS本质是“钻到底再回溯”,如果数据量太大或结构复杂,钻的过程会占用太多内存和CPU。比如用DFS遍历1000万节点的图,栈里保存的路径信息可能占几十GB内存,普通电脑根本装不下。更惨的是,有些系统栈空间就几MB,钻到第500层就爆了。比如Java虚拟机栈默认是1GB,但实际用DFS处理百万级节点时,可能只到第200层就内存溢出。而且循环检测代码如果写不好,比如漏掉回溯节点标记,就会像掉进迷宫一样转圈圈。现在很多框架都改用迭代DFS,用队列代替栈,这样内存消耗少一半,还能防死循环。
本题链接: