Recursion 递归fibonacci级数中的堆栈运算

Recursion 递归fibonacci级数中的堆栈运算,recursion,stack,Recursion,Stack,递归函数操作期间堆栈中发生了什么?我在理解这些函数调用期间堆栈的分支时遇到了很多困难。有人对其进行分解将真正帮助我每当遇到函数调用时,程序将创建一个新的堆栈框架,为本地(自动)分配空间变量 因此,在这种情况下,为了计算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(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(1)是基本情况

f(4-2=2)来自f(4)

f(1)来自f(2)(再次)

f(0)来自f(2)(再次)

从f(2)返回

从f(4)返回

你会注意到这不是很有效


正如@SMA所说,研究如何使用调试器,例如Python中的
pdb
或C中的
gdb
,这将使您对堆栈发生的情况有一个很好的了解。

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