使用不带 or 循环的递归反转字符串<algorithm>

Reversing a string using recursion without <algorithm> or loops

本文关键字:字符串 gt lt algorithm 递归 or 循环      更新时间:2023-10-16

我正在尝试创建一个函数,该函数完全不使用recters()函数或循环(即" hello"变成" olleh"),但是我得到了一个段我在下面起草的以下代码的错误:

void reverseString(string &s) {
    int strIndex = 0;
    int strSize = (s.size() - 1);
    if (s.size() <= 1) { 
        return;
    }
    else {
        if (strIndex < (s.size() / 2)) {
            int temp = s.at(strIndex);
            s.at(strIndex) = s.at(strSize);
            s.at(strSize) = temp;
            strIndex = strIndex + 1;
            strSize = strSize - 1;
            reverseString(s);
        }
    }
}

注意:不允许我更改函数的参数。

此行:

strIndex = strIndex + 1;

永远不会产生效果,因为对于函数的下一个调用,局部变量不是"重复使用"的。每个功能调用都会创建一组新的本地变量。

由于您无法更改功能签名,因此必须更改字符串。也许类似:

void reverseString(string &s) {
    if(s.size() <= 1)
        return;
    char c = s[0];
    s = s.substr(1, s.size() - 1);
    reverseString(s);
    s += c;
}

您只是在同一字符串上递归调用反转,这只会导致相同的过程重复AD Infinitum并导致stackoverflow