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

Python递归函数执行逻辑困惑求助:fun(25)案例解析

递归函数执行逻辑解惑

原递归函数执行过程

先看你给出的初始代码:

def fun(a):
    if a > 30:
        return 3
    else:
        return a + fun(a + 3)

print(fun(25))

执行过程是从外层到内层递归调用,再从内层向外层返回计算结果,具体步骤:

  1. 调用fun(25):25≤30,返回25 + fun(28)
  2. 调用fun(28):28≤30,返回28 + fun(31)
  3. 调用fun(31):31>30,直接返回3
  4. 倒推计算:fun(28)=28+3=31,fun(25)=25+31=56,最终输出56。

不同步长的结果解释

你把a+3换成不同步长后,结果差异的原因如下:

  • 步长0:fun(a+0)等价于fun(a),函数会无限调用自身,触发RecursionError(递归深度超限)
  • 步长1:递归路径为25→26→27→28→29→30→31,最终计算:25+26+27+28+29+30+3=168
  • 步长2:递归路径为25→27→29→31,计算:25+27+29+3=84
  • 步长3:对应初始代码,结果56(前面已解释)
  • 步长4:递归路径为25→29→33,计算:25+29+3=57
  • 步长5:递归路径为25→30→35,计算:25+30+3=58
  • 步长≥6:25+6=31>30,fun(25)直接返回25+3=28;步长7时25+7=32>30,结果同样是25+3=28,所以步长≥6时结果一致。

加入while循环后的问题

你添加while循环的代码:

def fun(a):
    i = 1
    if a > 30:
        return 3
    else:
        while i <= 10:
            return a + fun(a + i)
            i += 1
            print(i)
        

print(fun(25))

核心问题是**return语句会直接终止函数执行**:进入else分支的while循环后,第一行就执行return a + fun(a+i)(此时i=1),函数直接返回结果,i+=1和print(i)根本不会运行,相当于调用了步长1的情况,所以输出168。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:35:26