一、题目:判断输入的字符串是否为回文系列。
二、程序基本思路:
1.首先判断若字符串的长度为0或1,如果是,则这个字符串是回文序列,程序直接结束
2.若字符串长度大于1,先将字符串转化成字符数组,定义旗帜flag、字符数组头和尾标识,将字符数组首地址和以上定义传给递归方法
3.用头尾标记数组头尾字符来进行一一比较,如果一致,继续递归调用自身,直至达到递归终止条件。如果中途有不匹配的,返回输出字符串不是回文序列。
递归终止条件为头尾标记相等或相差为1,返回输出字符串是回文序列。
三. 程序源代码
1 import java.util.Scanner; 2 3 public class panduanhui { 4 static char []a=new char[1000]; 5 static String str; 6 static int flag=0; 7 static int i=0; 8 static int k=0; 9 public static void main(String[] args) { 10 Scanner input=new Scanner(System.in); 11 System.out.println("请输入一个字符串:"); 12 str=input.nextLine(); 13 //把字符串变成一个字符数组 14 a=str.toCharArray(); 15 k=a.length; 16 int flag1=0; 17 if(a.length==1||a.length==0) 18 { 19 System.out.println("字符串"+str+"是回文序列"); 20 } 21 else { 22 huiwenpanduan(a,i,k); 23 flag1=1; 24 } 25 if(flag1==1) 26 { 27 //判断输出 28 if(flag==0) { 29 System.out.println("字符串"+str+"不是回文序列"); 30 } 31 else { 32 System.out.println("字符串"+str+"是回文序列"); 33 } 34 } 35 } 36 //将字符数组作为参数传入方法中 37 public static void huiwenpanduan(char[] a,int i,int k) { 38 //首尾字符比较 39 if(a[i]==a[k-1]) 40 { 41 //标记前移 42 i++; 43 //标记后移 44 k--; 45 //递归终止条件 46 if(k-i==1||k-i==2) { 47 flag=1; 48 return ; 49 } 50 //递归调用自身 51 huiwenpanduan(a,i,k); 52 } 53 //首尾字符不相同,不是回文序列,返回 54 else { 55 flag=0; 56 return ; 57 } 58 } 59 60 }
四、运行结果:
五、总结
1. 递归方法要明确递归终止条件
2.递归要调用自身
3.递归方法每次调用都要减小问题规模