使用递归引用参数传递函数?

时间:2014-03-06 02:48:07

标签: c++ recursion

对于我的void函数反向,我必须得到一个字符串并用递归反转它。

到目前为止,我有

void reverse(string &s)
{
    string b = s;
    s = s.substr(1) + s.at(0);
}

但由于函数的传递参考要求,它不起作用。如何利用引用传递进行递归?

2 个答案:

答案 0 :(得分:2)

为了记录,这是我回答时的功能:

void reverse(string &s)
{
    s = reverse(s.substr(1)) + s.at(0);
}

这里有多个问题:

首先,您要将reverse的结果与char相加。 reverse会返回void,所以这不起作用。其次,substr创建一个新字符串,并通过引用传递temp是一个麻烦。最后,在递归中,您需要退出条件。实际上,当长度为1时,您的方法会崩溃尝试获取子目录。

这是一个有效的版本:

void reverse(string &s)
{
    if (s.size() == 1)
        return;

    string sub = s.substr(1);
    reverse(sub);
    s = sub + s.at(0);
}

答案 1 :(得分:0)

怎么样:

void _reverse(string& s, size_t z0, size_t z1)
{
    if (z1 <= z0)
        return;

    auto aux = s[z0];
    s[z0] = s[z1];
    s[z1] = aux;
    _reverse(s, z0 + 1, z1 - 1);
}


void _reverse(string& s)
{
    _reverse(s, 0, s.length() - 1);
}


int main()
{
    string x = "hello my friend";
    _reverse(x);
    cout << x << endl;
}