Python递归函数执行逻辑困惑求助:fun(25)案例解析
递归函数执行逻辑解惑
原递归函数执行过程
先看你给出的初始代码:
def fun(a): if a > 30: return 3 else: return a + fun(a + 3) print(fun(25))
执行过程是从外层到内层递归调用,再从内层向外层返回计算结果,具体步骤:
- 调用
fun(25):25≤30,返回25 + fun(28) - 调用
fun(28):28≤30,返回28 + fun(31) - 调用
fun(31):31>30,直接返回3 - 倒推计算:
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
相关产品推荐
相关产品推荐

