http://blog.csdn.net/dy_0708/article/details/52831355
/**
* Created by 50794 on 2016/10/17.
*/
public class Test {
static int num = 0;
//计算两个数的最大公约数
public static int gcd(int a,int b){
System.out.println("第"+(++num)+"次进入。");
if(a == b){//如果两个数相等,那最大公约数就是它们本身
return b;
}
if(a > b){//保证a始终大于b
//判断奇偶
if( (b&1)==0 && (a&1)==0){//如果两个数都是偶数,
return gcd(a>>1,b>>1)<<1;//等于 gcd(a/2,b/2)*2;的写法。
}
else if( (a&1)==1 && (b&1)==0){//如果a是奇数,b是偶数
return gcd(a,b>>1);
}
else if( (a&1)==0 && (b&1)==1){//如果a是偶数,b是奇数
return gcd(a>>1,b);
}
else{//如果a和b都是奇数
return gcd(b,a-b);
}
}
else{
return gcd(b,a);
}
}
public static void main(String []a){
System.out.println(gcd(10000,10001
));
}
}
这是上面代码运行的结果,可以看到1w的数也只需进行37次计算(仅供参考)