C 程序中使用递归函数的辅助空间?


接下来,我们将了解递归函数调用需要哪些辅助空间。递归函数调用与正常函数调用有何不同?

假设我们有一个函数如下 −

long fact(int n){
   if(n == 0 || n == 1)
      return 1;
   return n * fact(n-1);
}

这是一个递归函数。我们用 fact(5) 调用它时,它将在栈中存储地址,如下所示 −

fact(5) --->
fact(4) --->
fact(3) --->
fact(2) --->
fact(1)

由于递归函数会不断地自己调用自己,所以地址被添加到栈中。因此,如果一个函数被递归调用 n 次,它将占用 O(n) 的辅助空间。但这并不意味着如果一个普通函数被调用 n 次,它的空间复杂度就是 O(n)。对于普通函数,当它被调用时,该地址会被推入到栈中。当它完成后,它会从栈中弹出该地址并返回到调用方函数中。然后再次调用它。因此,其空间复杂度为 O(1)。

更新日期:20-Aug-2019

300 次浏览

开启您的职业生涯

完成课程,获取认证

开始
广告
© . All rights reserved.