考虑以下代码:
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/