递归调用期间的函数堆栈

时间:2015-10-19 12:32:57

标签: stack

这是功能:

 fun(int n)
    {
      if(n>0)
       {
         fun(n-1)+fun(n-2);
         //does both functions have same stack//
        }
      else
       {
          return 0;
        }
   }

我需要知道在重复调用时如何为此函数创建堆栈。

1 个答案:

答案 0 :(得分:0)

AFAIK, 它不是关于处理器维护多少堆栈,而是关于如何维护这样的堆栈。

enter image description here

在这里,让我们通过一个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)。和执行整个代码的方式相同。因此,它为这种调用保持相同的堆栈。

希望,有用。