两千多年前的欧几里得算法的目的是求两个非负整数的最大公约数
具体算法如下:
/**获取最大公约数的函数*/
public static int gcd(int p, int q){
if (q == 0){
return p;
}
int r = p % q;
return gcd(q,r);
}
A:如果p是那个比较大的数,那么r肯定是一个大于0小于q的数了
递归调用的时候形参p的实参就是q,相对于形参q的实参r来说,也是比较大的数,能继续使得第二个参数变小,不会出现堆栈溢出。
B:如果q是那个比较大的数,那么r,肯定是p的值了
那么第二次调用的时候形参p的实参就是q(较大的数)了,形参q的实参就是p了,重新回到A.