c++ - 对具有按引用传递参数的函数使用递归?

标签 c++ recursion

对于我的 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/

相关文章:

java - 使用预定义的递归创建基本数学运算

recursion - 记忆化可以与动态编程中的迭代解决方案一起使用吗?

c++ - 优化计数排序?

c++ - 如何创建具有有效维度的常量缓冲区

c++ - 参数相关名称查找和 typedef

javascript - 如何防止尾递归函数颠倒列表的顺序?

php - 如何递归获取多维数组中所有父元素的ID?

c++ - 在 boost::statecart 中记录状态变化

c++ - QGLWidget 的 glXXX 函数调用是如何处理的?

c++ - 如何用模板参数包的内容填充数组?