这是功能:
fun(int n)
{
if(n>0)
{
fun(n-1)+fun(n-2);
//does both functions have same stack//
}
else
{
return 0;
}
}
我需要知道在重复调用时如何为此函数创建堆栈。
答案 0 :(得分:0)
AFAIK, 它不是关于处理器维护多少堆栈,而是关于如何维护这样的堆栈。
在这里,让我们通过一个n = 3的例子来理解它。第一个fun(3)被调用,它将调用fun(2),它将调用fun(1)等等(称为fun(n-1))。因此,堆栈条目将很有趣(3) - > fun(2) - > fun(1) - > fun(0)。由于参数为零,函数将返回“0”。所以,fun(0)从堆栈中跳出来。此外,对于n = 1执行有趣的剩余调用(n-2),对于该调用,函数不返回任何值。所以,执行将完成直到功能结束。然后类似地,fun(1)将从堆栈中加载。所以此时堆栈具有以下值fun(3) - > fun(2)。在回到乐趣(2)之后,调用下一个乐趣(2)(即有趣(n-2))。并被添加到堆栈中。现在,堆栈值将很有趣(3) - > fun(2) - > fun(0)。和执行整个代码的方式相同。因此,它为这种调用保持相同的堆栈。
希望,有用。