在递归函数操作期间堆栈会发生什么?我在理解这些函数调用期间堆栈的分支时遇到了很多麻烦。有人打破它会真的帮助我
答案 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)从f(2)(再次)
来自f(2)的f(0)(再次)
从f(2)返回
从f(4)返回
你会发现这不是很有效。
正如@SMA所说,考虑使用Python中的pdb
或C语言中的gdb
等调试器 - 它将让您深入了解堆栈的内容。