You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python递归为何失败?为何返回[]并触发最大递归深度?

递归失败原因分析

首先明确关键参数值:
parents = df.parent.dropna().unique().astype(int)执行后得到的是[1,2,5],所以parents[1]的值是2。

无限递归的触发过程

调用find_parent(2)后,执行流程如下:

  1. 第一次调用:将整数2转为列表[2],查找parent为2的行,对应的id是[2,3],递归调用find_parent([2,3])。
  2. 第二次调用:传入列表[2,3],查找parent属于[2,3]的行——其中parent=2的id仍是2,3,parent=3没有匹配的行,所以得到的id列表还是[2,3],再次递归调用find_parent([2,3])。
  3. 自此进入无限循环:每次递归的输入参数都是[2,3],永远无法触发len(init_parent) == 0的终止条件,直到Python触发最大递归深度限制,抛出RecursionError。

为什么返回空列表[]

当递归深度超过Python的默认限制(通常是1000)时,解释器会强制终止递归并抛出异常。此时函数没有正常执行到返回语句,你看到的[]是异常处理后的默认返回值,而非函数的正常输出。

函数逻辑的核心问题

  1. 未处理自环/循环引用:数据中存在id=2的parent=2的行,导致递归时会反复处理同一个节点,无法收敛。
  2. 递归逻辑无收敛性:每次递归调用的参数没有向终止条件(空列表)靠近,反而陷入了固定输入的循环。

内容的提问来源于stack exchange,提问作者John Stud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:05:39