class A{
public int gcd(int sum1,int sum2)
{     int i=0;
      if(sum1<sum2)
      {
       int flag=0;
        flag=sum2;
        sum2=sum1;
        sum1=flag;
        gcd(sum1,sum2);
      
      }
      else if (sum1%sum2!=0)
            gcd(sum2,sum1%sum2);
      else 
      System.out.println (sum2);
      return sum2;public class Test_diGui2 {
        
    public static void main(String[] args) {
       A a=new A();
      System.out.println (a.gcd(1024,10224));
    
    }
}

解决方案 »

  1.   

    LZ这里是否忘记加了大括号???
    else 
    {
              System.out.println (sum2);
              return sum2;
    }
      

  2.   

    如果像你所说的加个大括号,就会报错没有return语句!
      

  3.   

    class A {
    public int gcd(int sum1, int sum2) {
    // int i = 0;
    if (sum1 < sum2) {
    int flag = 0;
    flag = sum2;
    sum2 = sum1;
    sum1 = flag;
    sum2 = gcd(sum1, sum2); } else if (sum1 % sum2 != 0)
    sum2 = gcd(sum2, sum1 % sum2);
    else {
    System.out.println(sum2);
    }
    return sum2;
    }
    }public class Test_diGui2 { public static void main(String[] args) {
    A a = new A();
    System.out.println(a.gcd(1024, 10224)); }
    }
    这样应该对吧
      

  4.   

    class A{
        public int gcd(int sum1,int sum2)
        {     int i=0;
              if(sum1<sum2)
              {
                  int flag=0;
                  flag=sum2;
                  sum2=sum1;
                  sum1=flag;
                  return gcd(sum1,sum2);          
              }
              else if (sum1%sum2!=0)
                  return gcd(sum2,sum1%sum2);
              else {
                  System.out.println (sum2);
                  return sum2;
              }
         }
    }public class Test_diGui2 {
            
        public static void main(String[] args) {
           A a=new A();
          System.out.println (a.gcd(1024,10224));
        
        }
    }
      

  5.   

    我debug了一下,到执行return sum2后,不知又执行了gcd(sum2,sum1%sum2);这条语句,这比较怪异...
      

  6.   

    你是递归进去的,还是要递归回来的,每次 返回的都是自己的方法里的sum2 变量 ;如果你不用递归,写两个一模一样的方法 用  (8,9) 两个数字去调 你就看出是什么原因造成 的了。
      

  7.   

    你是递归进去的,还是要递归回来的,每次 返回的都是自己的方法里的sum2 变量 ;如果你不用递归,写两个一模一样的方法(方法名不一样) 用  (8,9) 两个数字去调 你就看出是什么原因造成 的了。
      

  8.   

    lz的代码有很多值得改进的地方,比如
    int flag=0;
    flag=sum2;
    sum2=sum1;
    sum1=flag;
    return gcd(sum1,sum2);
    为什么不是直接return gcd(sum2,sum1);呢?另外没有对负数之类的进行判断处理额
      

  9.   

    是这样的你使用了 递归一直调用这个方法,而你返回的却是 该方法的 参数-sum2它只是一个临时变量,这个值还是保存在这次方法调用当你 下一次递归 的时候,那两个参数的 生命周期 也 仅仅 那一次的方法里它一直 递归 到输出那个sum2的时候,就会返回当返回到 第一次 执行这个方法的时候 就执行完了而sum2的结果 也仅仅 是 这次所计算出来的 sum2gcd(1024,10224)因为 sum1 比 sum2 小,所以会输出 1024如果是 gcd(1024, 1023) 就会输出 1023只要 sum1 > sum2,就输出 sum1;反之输出 sum2
      

  10.   

    哎,C语言或者C++转过来的学生。。java里没有地址传递这么一说。
      

  11.   

    如果你想要 只有一个结果应该定义一个 成员变量
    class A{
        private int tmp;
        public int gcd(int sum1,int sum2)
        {     int i=0;
              if(sum1<sum2)
              {
                  int flag=0;
                flag=sum2;
                sum2=sum1;
                sum1=flag;
                gcd(sum1,sum2);
              
              }
              else if (sum1%sum2!=0)
                       gcd(sum2,sum1%sum2);
              else{
                  System.out.println (sum2);
                  tmp = sum2;
              }
              return tmp;public class Test_diGui2 {
            
        public static void main(String[] args) {
           A a=new A();
          System.out.println (a.gcd(1024,10224));
        
        }
    }