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

Java字符串递归反转代码理解困惑求助

字符串反转递归代码的执行逻辑拆解

先明确你说的应该是这类标准递归反转代码:

public static String reverse(String s) {
    // 递归终止条件:空字符串直接返回
    if (s.isEmpty()) {
        return s;
    }
    // 递归调用:取子串反转后,拼接当前字符串的第一个字符
    return reverse(s.substring(1)) + s.charAt(0);
}

拿输入"howdy"为例,一步步拆解执行过程,你就能明白为什么最终输出是"ydwoh":

  • 第一层调用:reverse("howdy"),字符串非空,执行reverse("owdy") + 'h',但此时reverse("owdy")还没计算完成,先暂停当前调用,进入下一层递归。
  • 第二层调用:reverse("owdy"),执行reverse("wdy") + 'o',同样暂停,进入下一层。
  • 第三层调用:reverse("wdy"),执行reverse("dy") + 'w',暂停,进入下一层。
  • 第四层调用:reverse("dy"),执行reverse("y") + 'd',暂停,进入下一层。
  • 第五层调用:reverse("y"),执行reverse("") + 'y',此时触达终止条件,reverse("")返回空字符串,所以这一层返回"" + 'y' = "y"。
  • 回到第四层:拿到reverse("y")的结果"y",拼接'd',返回"y" + 'd' = "yd"。
  • 回到第三层:拿到reverse("dy")的结果"yd",拼接'w',返回"yd" + 'w' = "ydw"。
  • 回到第二层:拿到reverse("wdy")的结果"ydw",拼接'o',返回"ydw" + 'o' = "ydwo"。
  • 回到第一层:拿到reverse("owdy")的结果"ydwo",拼接'h',最终返回"ydwo" + 'h' = "ydwoh"。

关于你疑惑的字符拼接存储位置:
Java的递归调用依赖方法栈,每一层递归调用都会在栈中创建一个栈帧,里面保存了当前方法的局部变量(比如s.substring(1)的结果、s.charAt(0)取到的字符)和执行状态。只有当递归触达终止条件开始往回走时,才会逐个取出栈帧里的字符,和下层递归返回的字符串进行拼接,最终把结果传递回最上层调用。

你之前误以为会直接返回"owdyh"这类结果,是因为没搞清楚递归的"先递后归"逻辑——递归是先不断深入到终止条件,再从底层开始逐步拼接返回,而不是在每一层直接拼接后返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:33:17