public class return1 {
public static int gcd(int a, int b) { 
int min = a; 
int max = b; 
if (a > b) { 
min = b; 
max = a; 

if (min == 0) 
return max; 
else 
return gcd(min, max - min); 

public static void main(String[] args) { 
System.out.println(return1.gcd(75, 15)); 
} }
小弟有一个问题:上面表达式输出结果是15
                 请问大家步骤是怎么来的,尽量详细点,谢谢
小弟还有个问题:开始的时候 gcd(int a, int b)
                                int min = a; 
              int max = b; 
到后面if(a>b) min = b; 
              max = a;  他们为什么又不同了呢,是互换位置了吗?
                        小弟刚学java几天。希望得到大家的指点。谢谢

解决方案 »

  1.   

    这是递归。
    第一遍 min=15,max=75
    第2遍 min=15,max=60
    第3遍 min=15,max=45
    第4遍 min=15,max=30
    第5遍 min=15,max=15
    第6遍 min=15,max=0
    当执行到第六遍的时候,满足a>b 而且满足min=0;因此返回了15if(a>b)
    {
    min = b;
    max = a;
    }
    是换位置。
      

  2.   

    1>min=15 , max=75;min!=0;gcd(min, max - min);
    2>min=15 , max=60;min!=0;gcd(min, max - min);
    3>min=15 , max=45;min!=0;gcd(min, max - min);
    4>min=15 , max=30;min!=0;gcd(min, max - min);
    5>min=15 , max=15;min!=0;gcd(min, max - min);
    6>min=0  , max=15;min==0,结束。单步一下。
      

  3.   


    java语法不是从左到右,至上而下执行的吗?怎么跑到最后开始执行了?另外return1.gcd是什么意思啊?这是一种书写规范吗?
      

  4.   

    debug一下,看看编译器是怎么一步步走的
      

  5.   

    [Quote=引用 1 楼  的回复:]
    这是递归。
    第一遍 min=15,max=75
    第2遍 min=15,max=60
    第3遍 min=15,max=45
    第4遍 min=15,max=30
    第5遍 min=15,max=15
    第6遍 min=15,max=0
    当执行到第六遍的时候,满足a>b 而且满足min=0;因此返回了15
                返回15,为什么0不返回呢?
      

  6.   

    首先a=75,b=15,a>b,所以执行第一个if语句 min=15,max=75然后进行判断min==0?显然的不是,就运行else的语句,return gcd(min, max - min),即return gcd(12,60),然后同上面再重复判断,知道min==0,程序结束。