1、题目
使用递归方式判断某个字串是否是回文( palindrome )
“回文”是指正着读、反着读都一样的句子。比如“我是谁是我”
使用递归算法检测回文的算法描述如下:
A single or zero-character string is a palindrome.
Any other string is a palindrome if the first and last characters are the same, and the string that remains, excepting those characters, is a palindrome.
2、程序源代码
import java.util.Scanner; public class palindrome {public static boolean deside(String s,int i) {//判断是否是回文串的函数
if(s.charAt(0) == s.charAt(s.length() - 1)){//判断第一个字符和最后一个字符是否相等,包括长度为1,2的字符串
if(s.length() > 2){//当长度为2以上时的情况
return deside(s.substring(i+1,s.length()-1),0);//substring函数将字符串的首尾去掉,进行第二次判断
}else return true;//返回true }else return false;//不满足条件返回false
}
public static void main(String[] args) {//主方法
Scanner sc= new Scanner(System.in);
String a = sc.nextLine();//输入字符串
if(deside(a,0)){
System.out.println("字符串 " + a + "是回文串");//值为真输出是回文串
}else{
System.out.println("字符串 " + a +"不是回文串");//值为假输出不是回文串
}
sc.close();//释放空间
}
} 3、设计思路: 利用递归实现回文串的判断,而回文串的定义是正着念反着念都是一样的,所以就能想出来判断方法,即第一个和最后一个字符相等,第2个和第n-1个字符相等,当第二次判断的时候,可以用substring分割字符串,获得删除首尾字符的新字符串,然后再次进行判断,但是中间可能剩一个或者两个,如果在判断就会更加麻烦,因此可以直接用(s.charAt(0) == s.charAt(s.length() - 1)判断,当剩一个字符的时候,也满足条件,当条件全部满足返回true,递归的时候满足条件,调用参数为新字符串的本身函数,一直到满足条件,输出true,否则输出false,并在主方法中输出是否为回文串,并且将判断的方法定义为boolean型,配合主方法进行输出。 4、运行截图:
5编程总结:要了解charAt(),substring()等方法的应用,并且在应用递归的时候,要清楚递归的条件,结束条件,并且要对方法的类型有深刻的了解,并不是void用的多就都是void,方法的类型选择是根据实际情况来判断的,不是想写什么就写什么,看哪个用的多就用哪个。