c++ - 递归函数中的变量在每次调用中都采用相同的内存地址吗?

标签 c++ recursion

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/

相关文章:

c++ - Boost Graph - 大图上的 Astar 非常慢

c++ - 如何将字符串附加到字符?

python - 函数式编程 Python : smallest number divisible by each of the numbers 1 to 20

algorithm - 用树和递归寻找时间复杂度

c++ - constexpr 结构成员初始化

c++ - 模拟串口

c# - 由于使用 sitecore 的对象的当前状态,该操作无效

c++ - 递归的 Theta 运行时

c++ - 用 ofstream 写数据崩溃 C++

c++ - 递归打印星形图案