编程之美中的最大公约数问题,下面通过代码依次实现之.
解法一、欧几里得的辗转相除法
int gcd(int x,int y){
return (!y)?x:gcd(y,x%y);
}
非递归算法的代码如下:
int gcd(int x,int y){
int t;
while(y){
t=y;
y=x%y;
x=t;
}
return x;
}
解法二、辗转相减法
int gcd(int x,int y){
if(x<y)
return gcd(y,x);
return (!y)?x:gcd(y,x-y);
}
非递归算法的代码如下:
int gcd(int x,int y){
int t;
while(y){
if(x<y){
t=y;
y=x,x=t;
}
t=y;
y=x-y;
x=t;
}
return x;
}
解法三、改进的使用移位缩小空间的算法
bool isEven(int x){
return (x&0x01)?false:true;
}
int gcd(int x,int y){
if(x<y)
return gcd(y,x);
if(!y)
return x;
if(isEven(x)){
if(isEven(y))
return gcd(x