对于我的 void 函数 reverse,我必须获取一个字符串并使用递归将其反转。
到目前为止,我有
void reverse(string &s)
{
string b = s;
s = s.substr(1) + s.at(0);
}
但由于该函数的引用传递要求,它无法工作。如何利用引用传递进行递归?
最佳答案
作为记录,这是我回答时的功能:
void reverse(string &s)
{
s = reverse(s.substr(1)) + s.at(0);
}
这里有多个问题:
首先,您将使用 char
添加 reverse
的结果。 reverse
返回 void
所以这不起作用。其次,substr 创建一个新字符串并通过引用传递一个 temp 是自找麻烦。最后,在递归中,您需要一个退出条件。实际上,当长度为 1 时,您的方法在尝试获取 substr 时崩溃。
这是一个有效的版本:
void reverse(string &s)
{
if (s.size() == 1)
return;
string sub = s.substr(1);
reverse(sub);
s = sub + s.at(0);
}
关于c++ - 对具有按引用传递参数的函数使用递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22213876/