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

Java递归回文判断代码问题:首尾同字符即误判为回文

问题分析与修复

你这段代码的问题核心在最后那个递归分支——你调用了isPalindrome递归方法,但没返回这个递归调用的结果,反而直接返回了当前方法里提前设好的palindrome=true,这就导致内层递归检测到非回文时的结果被完全忽略,最终错误返回true。

举个例子,输入abca的时候:

  1. 首尾字符a相同,进入最后一个分支,把palindrome设为true,然后调用递归isPalindrome("abca",1,2)
  2. 内层递归里,字符b和c不相等,触发第三个if分支,返回false
  3. 但外层方法根本没接收这个false,直接执行最后的return palindrome,也就是返回true,所以错误判定成回文

修复后的代码

public static boolean isPalindrome(String inputted_string, int first_letter, int last_letter) {
    if (first_letter == last_letter) {
        System.out.println(true + "1");
        return true;
    }
    if (first_letter > last_letter) {
        System.out.println(true + "2");
        return true;
    }
    if (inputted_string.charAt(first_letter) != inputted_string.charAt(last_letter)) {
        System.out.println(false + "3");
        return false;
    }
    // 首尾相同,直接返回递归调用的结果,不用额外存变量
    System.out.println(true + "4");
    return isPalindrome(inputted_string, first_letter + 1, last_letter - 1);
}

额外优化建议

  • 没必要提前定义palindrome变量,每个分支直接返回对应布尔值就行,代码更简洁清爽
  • 后面的分支不用写else if,因为前面的分支已经用return结束方法了,后面的代码根本不会被执行到,用普通if可读性更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:57:20