前天面试一道程序题,要求:写一方法用递归,判断一字符串顺序读和倒序读是否一样!我是这样写的!
可是为什么已经进入return true了,程序为什么还是会继续递归下去呢!
public class Test {
    public static void main(String[] args) {
    String s="abccba";
  
    System.out.println(isSame(s));
}
    public static boolean isSame(String s){
  
        char c1=s.charAt(0);
        char c2=s.charAt(s.length()-1);
        System.out.println(c1+";"+c2);
        String strTemp=s.substring(1, s.length()-1);
        if(c1==c2&&strTemp.length()!=0){
            isSame(strTemp);
        } else if (c1==c2&&strTemp.length()==0){
            return true;
        }
        return false;
   }
}

解决方案 »

  1.   

    return true后是进入上一层递归调用的地方,除非你递归只一层就直接进入了return true;
    多层执行的过程是,直到最内层不再嵌套,有一个确切的返回值,把这个值返回给上一层,上一层再通过这个值计算过继续向上一层返回,直到最外层,这时再进入return true;或return false;整个方法才算执行完毕,也是为什么会叫递归的原因。也是为什么并不是进入return true就是递归的结束的原因!
      

  2.   

    return isSame(strTemp);用递归你也该这样用吧 
      

  3.   

    你这个PG有问题:
    1.String s="abccba"; 如果String s="abcba",也应该是符合要求的,但是用你的PG判断不了。
    2.        if(c1==c2&&strTemp.length()!=0){
                isSame(strTemp);
            }
      这里你将isSame(strTemp)的返回值忽略了。完全不影响结果。
    改成下面这样: public static void main(String[] args) throws Exception{
        String s="abcba";
        System.out.println(isSame(s)); 
    }

    public static boolean isSame(String s) {

    if(s.length() == 1) return true;

    char c1 = s.charAt(0);
    char c2 = s.charAt(s.length() - 1);
    String strTemp = s.substring(1, s.length() - 1);
    if (c1 == c2) {
    if (strTemp.length() != 0) {
    return isSame(strTemp);
    } else {
    return true;
    }
    } else {
    return false;
    }
    }
      

  4.   

    public class Test { 
        public static void main(String[] args) { 
        String s="abccba"; 
      
        System.out.println(isSame(s)); 
       } 
        
    public static boolean isSame(String s)
        { 
      
    if(s.length()<2)
    {
    return true;
    }
    char c1=s.charAt(0); 
    char c2=s.charAt(s.length()-1);  if(!c1.equels(c2))
    {
    return false;
    }else
    {
    return isSame(s.substring(1, s.length()-1)); 
    }
        }
    }
      

  5.   

    public class Test{
        public static void main(String args[])  throws Exception{
         System.out.println(isSame("abccba",0));
         System.out.println(isSame("abcba",0));
         System.out.println(isSame("abcbba",0));
        }
        public static boolean isSame(String str,int len){
         if(str.charAt(len)!=str.charAt(str.length()-1-len)){
         return false;
         }
         if(len>=str.length()/2){
         return true;
         }
         return isSame(str,len+1);
        }
    }
    这样来好一点吧.
      

  6.   

    public class Test10 { 
        public static void main(String[] args) { 
        String s="abccba"; 
        System.out.println(isSame(s)); 
        } 
        public static boolean isSame(String s){
         if(s.length()==0)
                 return true; 
         else if(s.length() == 1)
               return true;
         else{
          char c1=s.charAt(0); 
              char c2=s.charAt(s.length()-1); 
              System.out.println(c1+";"+c2); 
              
              String strTemp=s.substring(1, s.length()-1); 
              if(c1 != c2)
                   return false;
              else
                   return isSame(strTemp);
                      
         }
        } 
    }
      

  7.   


    public static boolean isSame(String str) {
    if(str.length() == 1 ||str.length() == 0 ) {
    return true;
    }
    if(str.charAt(0) == str.charAt(str.length() - 1))
    return isSame(str.substring(1,str.length()-1));
    else 
    return false;
    }
      

  8.   


    public class ReverseChar {
    char head;
    char foot;
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    ReverseChar rc = new ReverseChar();
    rc.ReverseBegin();
    }
    void ReverseBegin()
    {
    String s = new String("12342321");
    boolean result = Reversing(s); //invoke mothod to reverse
    System.out.println(result);
    }
    boolean Reversing(String s)
    {
    if(s.length()<2)return true;  //if string's length < 2 return
    head = s.charAt(0);   //first char
        foot = s.charAt(s.length()-1);  //last char
        if(head == foot)   //compare
        {
         s = s.substring(1, s.length()-1); 
         return Reversing(s);  //recursive 
        }
        else
        {
         return false; //if not equals return false
        }
    }
    }