c++ - 我对递归函数中变量如何工作的理解是否正确?

标签 c++ recursion

我最近开始在我的 C++ 类中进行递归,我想知道认为变量的范围对于特定堆栈帧是局部的是否正确:

3) return

2) flipString(" "); begin = a, end = t

1) flipString(at); begin = s, end = r

所以当它到达 return 语句时,它将弹出 第三帧关闭,

然后第二帧关闭 s = t + ""+ a

然后是 s = r + at + s 的第一帧,因此反转了字符串。

void flipString(string &s)
{
   if (s.size() < 2)
   {
      return;
   }
   else
   {

      string begin;
      string end;      

      begin = s.at(0);
      end = s.at(s.size()-1);

      s.erase(s.begin());
      s.erase(s.end()-1);

      flipString(s); 

      s = end + s + begin;   
   }

   return;
}

最佳答案

是的,您对函数工作原理和函数本身的看法似乎是正确的。

在函数的每次调用中,局部变量 begin 和 end 都有一个不同的实例,放在堆栈上。

函数参数 s 引用或指向所有堆栈帧中的相同字符串,因为它是一个引用。

如果传递一个普通函数参数(没有引用也不是指针),那么在每个调用堆栈级别也会有该参数的单独拷贝。

关于c++ - 我对递归函数中变量如何工作的理解是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44125793/

相关文章:

c++ - 使用 boost bind 时对非静态成员函数的使用无效 - C++

c++ - 发现父轮廓

c++ - 干净地关闭 ATL 应用程序

python - 递归和二叉树

c - 理解递归函数时遇到问题

c++ - 在 ubuntu 中将 c++ 编译器、链接器标志添加到 nsight eclipse 6.5

c++ - 如何查找根路径名称

java - 递归算法中的无限循环

java - 如何在 Vaadin 中使用递归获取子树项?

java - 递归和乘法