Java实验--关于简单字符串回文的递归判断实验
首先题目要求写的是递归的实验,一开始没注意要求,写了非递归的方法。浪费了一些时间,所谓吃一堑长一智。我学习到了以后看实验的时候要认真看实验中的要求,防止再看错。
以下是对此次的实验进行的分析:
1)递归是运用到了栈的思想
2)回文是一段从中间开始倒置的文字,回代的过程中出现不同的符号的时候就说明这段文字不是回文了
根据上面对回文判断的分析,就拿最简单的121来说,要每个字符判断直至2所在的位置,然后依次回代判断前面的1和后面的1的位置(上述的描述就类似于栈的思想)。
有关于栈还有递归其实我并不熟悉,所以此次的实验对我来说算是一次挑战吧。
接下来贴出实验的代码(利用递归实现回文的判断):
package huiwen; import java.util.Scanner; public class Huiwen { public static void main(String arg[]) { String sz=new String(); Scanner scan=new Scanner(System.in); while(!sz.equals("-1")) { System.out.println("-------------------------------------\n请输入一个字符串判断是不是回文(输入-1结束输出):"); if(scan.hasNext()) { sz=scan.next(); if(sz.equals("-1")) break; } if(isHuiwen(sz,0)) //给递归一个起点直至字符串的中间,并判断中途有没有不等的情况,如果出现中途不等返回false,反之返回true System.out.println("该字符串是回文\n"); else System.out.println("该字符串不是回文\n"); } scan.close(); System.out.println("结束判断"); } public static boolean isHuiwen(String s,int n) { int num=s.length(); if(num/2!=n) { if(isHuiwen(s,n+1)) { if(s.charAt(n)==s.charAt(num-n-1)) return true; else return false; } } else if(s.charAt(n)==s.charAt(num-n-1)) return true; return false; } }
回文的实验截图,在判断的过程中没有错误。
测试图如上所示
但是实验过程,一开始的时候再写递归的时候出现了一些问题,在调用isHuiwen方法的过程中,出现了一直都显示不是回文的情况。然后我对实验中为何会出现这种错误进行了分析,发现原来在判断的过程中由于在递归调用方法的前面加了一条判断语句,就是本来的num/2!=n错误的写成了num/2==n,这种错误是致命的,说明了我对于递归方面的基础还不行,所以对递归函数还得进一步了解。