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

请求解析Ruby中递归实现Fibonacci数列代码的分步工作原理

分步解析Ruby递归实现斐波那契数列的执行逻辑

没问题!我来一步步拆解这段递归斐波那契代码的执行过程,咱们就盯着fibonacci(6)这个调用慢慢捋清楚~

首先先明确这段代码的核心逻辑:

def fibonacci(n)
  n <= 1 ? n : fibonacci(n - 1) + fibonacci(n - 2)
end

这是三元表达式的写法,翻译成大白话就是:

  • 如果传入的n是0或者1,直接返回n(因为斐波那契数列的前两项定义就是fib(0)=0、fib(1)=1)
  • 否则,返回fib(n-1)和fib(n-2)的和——而这两个值又需要再次调用fibonacci函数来计算,这就是递归的核心:函数自己调用自己来拆解问题。

接下来咱们一步步追踪fibonacci(6)的执行流程:

  1. 初始调用fibonacci(6):因为6>1,所以需要计算 fibonacci(5) + fibonacci(4),现在得先算出这两个子调用的结果
  2. 先处理fibonacci(5):5>1,分解为 fibonacci(4) + fibonacci(3),继续拆解
  3. 处理这个fibonacci(4):4>1,分解为 fibonacci(3) + fibonacci(2)
  4. 处理这个fibonacci(3):3>1,分解为 fibonacci(2) + fibonacci(1)
  5. 处理这个fibonacci(2):2>1,分解为 fibonacci(1) + fibonacci(0)
  6. 终于到了递归的「终止条件」:
    • fibonacci(1):1<=1,直接返回1
    • fibonacci(0):0<=1,直接返回0
      所以fibonacci(2)的结果是 1+0 = 1
  7. 回到fibonacci(3):现在有了fibonacci(2)=1和fibonacci(1)=1,结果是1+1 = 2
  8. 回到fibonacci(4):现在有fibonacci(3)=2,接下来要算另一个子调用fibonacci(2)(这里注意,递归会重复计算已经算过的值),fibonacci(2)还是返回1,所以`fibonacci(4)=2+1 = 3
  9. 回到fibonacci(5):现在有fibonacci(4)=3,接下来算fibonacci(3)(同样是重复计算),结果是2,所以`fibonacci(5)=3+2 = 5
  10. 回到最初的fibonacci(6):已经算出fibonacci(5)=5,接下来要算fibonacci(4)(再次重复计算),结果是3,所以`fibonacci(6)=5+3 = 8
  11. 最后puts fibonacci(6)把结果8输出到控制台

小补充:这种朴素递归虽然容易理解,但有个明显的缺点——大量重复计算(比如fibonacci(2)、fibonacci(3)被调用了好几次),如果n很大的话效率会很低。如果要优化,可以用记忆化(把已经计算过的结果存起来)或者迭代的方式实现~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:57:41