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

Python递归函数返回参数的作用:修改返回值为何结果差异显著?

递归函数返回值差异的底层原因分析

一、返回result版本的执行逻辑

这个版本的递归核心是每一层调用都会把自身的k和下一层调用的返回值累加,最终返回这个累加结果,完全符合三角序列的计算逻辑。

以fib(6)为例,调用栈的执行顺序是:

  1. 从fib(6)开始,因为k>0,先调用fib(5),当前逻辑暂停
  2. 依次递归到fib(4)、fib(3)、fib(2)、fib(1),直到fib(0)
  3. fib(0)进入else分支打印空行,返回初始的result=0
  4. 开始回溯:
    • fib(1)计算result=1 + fib(0)=1+0=1,打印对应内容后返回1
    • fib(2)计算result=2 + fib(1)=2+1=3,打印后返回3
    • 以此类推,每一层的result都是当前k加上上一层的返回值,最终得到三角序列的打印结果:1、3、6、10、15、21

二、返回k版本的执行逻辑

这个版本的关键变化是每一层递归最终返回的是当前的k值,而非累加后的result,直接改变了result的计算逻辑:

同样以fib(6)为例:

  1. 递归调用到fib(0)时,返回的是k=0
  2. 回溯阶段:
    • fib(1)计算result=1 + fib(0)=1+0=1,打印后返回自身的k=1
    • fib(2)计算result=2 + fib(1)=2+1=3,打印后返回自身的k=2
    • fib(3)计算result=3 + fib(2)=3+2=5,打印后返回自身的k=3
    • 后续fib(4)到fib(6)的result依次为4+3=7、5+4=9、6+5=11,各自打印后返回对应的k值
  3. 所以打印结果变成了1、3、5、7、9、11

三、关于最终返回值的疑问

你疑惑“为何最终返回的不是k的1、2、3、4、5、6这些值”,原因很明确:

  • 递归的每一层调用都是独立的执行上下文,每一层的返回值只会被上一层调用用来计算临时的result,不会直接成为整个fib(6)调用的结果。
  • 只有最外层的fib(6)调用的返回值,才是整个函数调用的最终结果——也就是它自身的k=6。中间fib(1)到fib(5)的返回值,只是上层计算的临时数据,不会被直接输出或作为最终返回值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:13:12