【问题标题】:stack operation in recursive fibonacci series递归斐波那契数列中的堆栈操作
【发布时间】:2018-04-30 16:30:40
【问题描述】:

在递归函数操作期间堆栈中会发生什么?在这些函数调用期间我很难理解堆栈的分支。有人分解它真的会帮助我

【问题讨论】:

  • 你的递归函数在哪里?最好的学习方法是调试代码。
  • @SMA 递归函数到底是什么并不重要。停止鼓励用户发布不相关的详细信息。我敢打赌,你是那种会删除你的评论,然后根据你刚刚鼓励他们做的事情投票结束问题的类型。
  • f(n-1)+f(n-2) 是递归函数@SMA
  • @user234461 您是否鼓励人们不做任何工作就发布家庭作业?冷静一下……

标签: recursion stack


【解决方案1】:

每当遇到函数调用时,程序都会创建一个新的堆栈框架,为本地(自动)变量分配空间。

所以在这种情况下,为了评估f(n-1) + f(n-2),程序将首先增加堆栈指针以为f(n-1) 调用腾出空间,然后调用该函数。在该函数中,它将找到另一个f(n-1),并将评估f((n-1)-1),依此类推,直到达到基本情况。从基本情况返回后,它将评估f((((n-1)-1)...-2)f(n-1)+f(n-2) 中的第二项等。

例如,调用顺序将是

f(4)

f(3)

f(2)

f(1)(基本情况,返回)

f(0)(f(n-2) 的基本情况,返回 f(2) 的评估)

从 f(2) 返回到 f(3),计算出 f(1) + f(0)

f(3 - 2 = 1) 再次来自对 f(3) 的调用。立即返回,因为 f(1) 是基本情况。

f(4 - 2 = 2) 从 f(4)

f(1) 从 f(2) (再次)

f(0) 从 f(2) (再次)

从 f(2) 返回

从 f(4) 返回

你会注意到这不是很有效。

正如@SMA 所说,考虑使用调试器,例如 Python 中的 pdb 或 C 中的 gdb - 它会让您深入了解堆栈发生的情况。

【讨论】:

    猜你喜欢
    • 2011-03-24
    • 2014-11-14
    • 2011-07-27
    • 2012-05-06
    • 2012-11-19
    • 2016-11-07
    • 2012-02-16
    • 1970-01-01
    • 2010-12-03
    相关资源
    最近更新 更多