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

Java递归实现字符串反转失效,求问题原因及解决方法

字符串反转递归方法错误修复:输出sgra而非预期sarg的问题

核心错误分析

你的代码存在两个致命问题:

  1. 每次递归重置数组与指针:调用reversString时,都会将传入的字符串重新转为char数组,并重置j = chars.length-1。这意味着每次递归都在处理新的数组,之前的交换操作完全无效,等于反复对部分反转的字符串做首尾交换,最终得到错误结果。
  2. 用类成员变量保存递归状态:i、j、chars作为类成员变量,会在递归调用中被共享覆盖,导致指针逻辑彻底混乱,无法正确推进反转过程。

修复方案1:基于数组的递归实现(高效推荐)

把递归状态通过方法参数传递,拆分出辅助方法处理指针移动,避免状态污染:

package Rekursion;

public class StringReversal {

    public String reverseString(String text) {
        char[] chars = text.toCharArray();
        reverseHelper(chars, 0, chars.length - 1);
        return String.valueOf(chars);
    }

    // 辅助方法:用参数传递当前左右指针,递归处理数组反转
    private void reverseHelper(char[] chars, int i, int j) {
        // 终止条件:指针相遇或交叉时停止
        if (i >= j) {
            return;
        }
        // 交换首尾字符
        char temp = chars[i];
        chars[i] = chars[j];
        chars[j] = temp;
        // 递归处理中间子数组
        reverseHelper(chars, i + 1, j - 1);
    }

    public static void main(String[] args) {
        StringReversal sr = new StringReversal();
        System.out.print(sr.reverseString("gras")); // 输出sarg
    }
}

修复方案2:纯字符串递归实现(简洁易理解)

如果不需要操作数组,也可以直接基于字符串拼接实现递归,逻辑更直观:

package Rekursion;

public class StringReversal {

    public String reverseString(String text) {
        // 终止条件:空字符串或单字符直接返回
        if (text.isEmpty() || text.length() == 1) {
            return text;
        }
        // 拼接首尾字符 + 递归反转中间部分
        return text.charAt(text.length() - 1) 
               + reverseString(text.substring(1, text.length() - 1)) 
               + text.charAt(0);
    }

    public static void main(String[] args) {
        StringReversal sr = new StringReversal();
        System.out.print(sr.reverseString("gras")); // 输出sarg
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 09:32:29