void recur(int arr[], int l, int m, int r)
{
int L[4], R[4];
// some statements
recur(/*those arguments*/); //say.
}
现在,如果我以递归方式调用 recur()
函数,L[4]
、R[4]
是否会占用相同的内存为每个递归调用输入地址,否则每次调用都会采用不同的内存地址。
最佳答案
答案是否定的。每次调用一个函数(任何函数)都会创建一个新的堆栈帧,其中包含用于局部变量的新内存,无论是谁调用了该函数(同一个函数或另一个函数)。这意味着不同的内存地址。
这个答案在大多数情况下都是正确的。然而,正如巧妙的评论,当函数做的最后一件事是调用自身时,大多数编译器会执行尾调用优化并消除对所有堆栈的需要,对所有调用使用相同的堆栈,但参数不同。
在这里阅读更多:Stack Frame .
关于c++ - 递归函数中的变量在每次调用中都采用相同的内存地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46488251/