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,程序结束。