日期:2014-05-20  浏览次数:20784 次

姐姐,哥哥们,菜鸟又来问一个关于return的问题。

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几天。希望得到大家的指点。谢谢

------解决方案--------------------
这是递归。
第一遍 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

if(a>b)
{
min = b;
max = a;
}
是换位置。
------解决方案--------------------
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,结束。

单步一下。
------解决方案--------------------
debug一下,看看编译器是怎么一步步走的
------解决方案--------------------
首先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,程序结束。