Java递归回文判断代码问题:首尾同字符即误判为回文
问题分析与修复
你这段代码的问题核心在最后那个递归分支——你调用了isPalindrome递归方法,但没返回这个递归调用的结果,反而直接返回了当前方法里提前设好的palindrome=true,这就导致内层递归检测到非回文时的结果被完全忽略,最终错误返回true。
举个例子,输入abca的时候:
- 首尾字符a相同,进入最后一个分支,把
palindrome设为true,然后调用递归isPalindrome("abca",1,2) - 内层递归里,字符b和c不相等,触发第三个if分支,返回false
- 但外层方法根本没接收这个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
相关产品推荐
相关产品推荐

