c++ - 会不会在做递归内存的时候声明一个全局变量更高效更快?

标签 c++ recursion

考虑以下代码:

int main()  {
  int ar[100]={0};
  int n = 100;
  recurFun(ar, n);
  return 0;
}

void recurFun(const int ar[], int n)  {
  if(some condition)  {
    //some code here to manipulate ar[]...
    return ;
  }
  int i;
  //some code to manipulate i
  recurFun(ar, i)
}

我听说递归函数每次调用它自己时都会创建自己的变量,因此我希望 ar 被创建很多次并且可能会消耗大量内存,对吧?

如果我将 ar 声明为全局数组,如下所示:

int ar[100]={0};

int main()  {
  int n = 100;
  recurFun(n);
  return 0;
}

void recurFun(int n)  {
  if(some condition)  {
    //some code here to manipulate ar[]...
    return ;
  }
  int i;
  //some code to manipulate i
  recurFun(i)
}

这会提高内存效率吗? 因为我认为递归函数没有理由复制全局变量。但是,这会不会更慢,因为许多递归函数访问同一个数组,因此会导致一些开销。

最佳答案

const int ar[] 不会复制数组,它会将数组衰减为指向第一个元素的指针。

您的全局数组解决方案的内存效率略有提高,因为它不会在堆栈变量中传递 this 指针,但这并不重要。堆栈空间在溢出之前是空闲的,每次调用是否使用一个额外的指针不应该是堆栈溢出与否的区别。

关于c++ - 会不会在做递归内存的时候声明一个全局变量更高效更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39825314/

相关文章:

c# - C++ 等效于 C# Yield?

c++ - 4x4矩阵预乘和后乘

C++:使用递归加倍数字

c++ - 如何在网格上找到从 A 到 B 的最短路径?

recursion - 通过机器学习以递归方式预测时间范围

c++ - 每个类型的多实例计数器

c++ - 析构函数如何知道何时激活自己?可以依靠吗?

c++ - 在 "templated-base-class"中调用模板方法时出错

c++ - 写一个简单的数字三角形的建议,只有递归,没有循环?

java - * 没有循环的模式