用递归判断字符串是否为回文
程序基本思路:
1.首先判断若字符串的长度为0或1,如果是,则这个字符串是回文序列,程序直接结束
2.若字符串长度大于1,先将字符串转化成字符数组,定义旗帜flag、字符数组头和尾标识,将字符数组首地址和以上定义传给递归方法
3.用头尾标记数组头尾字符来进行一一比较,如果一致,继续递归调用自身,直至达到递归终止条件。如果中途有不匹配的,返回输出字符串不是回文序列。
递归终止条件为头尾标记相等或相差为1,返回输出字符串是回文序列。
import java.util.Scanner; public class Huiwen { static char []a=new char[1000]; static String str; static int f=0; static int n=0; static Scanner sc=new Scanner(System.in); public static void main(String[] args) { str=sc.nextLine(); a=str.toCharArray(); huiWen(a,n); if(f==0) { System.out.println(str+" : "+"不是回文序列"); } else { System.out.println(str+" : "+"是回文序列"); } } public static void huiWen(char[] a,int n) { if(a.length==1||a.length==0) { f=1; return ; } if(a.length-2*n-1==1) { f=1; return ; } if(a.length-2*n-1==2) { if(a[n]==a[a.length-n-1]) { f=1; return ; } else { f=0; return ; } } if(a[n]==a[a.length-n-1]) { n=n+1; huiWen(a,n); } else { f=0; return ; } } }
测试结果
总结
1. 递归方法要明确递归终止条件
2.递归要调用自身
3.递归方法每次调用都要减小问题规模