递归斐波纳契数列中的堆栈操作

时间:2018-04-30 16:30:40

标签: recursion stack

在递归函数操作期间堆栈会发生什么?我在理解这些函数调用期间堆栈的分支时遇到了很多麻烦。有人打破它会真的帮助我

1 个答案:

答案 0 :(得分:0)

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

因此,在这种情况下,要评估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)的调用再次

f(3 - 2 = 1)。立即返回,因为f(1)是基本情况。

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

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

来自f(2)的

f(0)(再次)

从f(2)返回

从f(4)返回

你会发现这不是很有效。

正如@SMA所说,考虑使用Python中的pdb或C语言中的gdb等调试器 - 它将让您深入了解堆栈的内容。