You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

返回string类型的递归字符串反转函数异常:输入hello仅返回l

字符串反转递归函数的问题分析与修复

你的递归函数输入hello仅返回l,核心问题是每次递归只返回中间子串的反转结果,完全丢弃了之前交换的首尾字符,导致最终只保留了最内层递归的单个字符。

原代码执行流程拆解

以输入hello为例:

  1. 初始字符串hello长度为5,交换首字符h和尾字符o,得到oellh;
  2. 调用reverse(s.substr(1, 3)),传入子串ell;
  3. 子串ell长度为3,交换首字符e和尾字符l,得到lle;
  4. 调用reverse(s.substr(1, 1)),传入子串l;
  5. 子串l长度为1,直接返回l;
  6. 整个递归链仅返回最内层的l,之前交换的o、h以及中间处理的字符都未被包含到最终结果中。

修复方案

方案1:简洁的递归拼接(无需swap)

直接通过字符串拼接实现反转逻辑,递归处理去掉首字符的子串,再将首字符追加到结果末尾:

string reverse(string s)
{
    if (s.size() <= 1)
        return s;
    return reverse(s.substr(1)) + s[0];
}

执行逻辑:reverse("hello") = reverse("ello") + "h" → reverse("ello") = reverse("llo") + "e" → 最终拼接为o + l + l + e + h = olleh,符合预期。

方案2:保留swap逻辑,补充首尾字符拼接

如果想保留你原有的swap思路,需要将交换后的首尾字符加到中间子串反转结果的两端:

string reverse(string s)
{
    int len = s.length();
    if (len <= 1)
    {
        return s;
    }
    swap(s[0], s[len-1]);
    return s[0] + reverse(s.substr(1, len-2)) + s[len-1];
}

执行逻辑:交换hello首尾得到oellh后,返回o + reverse("ell") + h,而reverse("ell")会返回lle,最终拼接为o + lle + h = olleh。

内容的提问来源于stack exchange,提问作者hafsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:50:24