编程之美 2.7最大公约数问题
bool isEven(int n)
{
return (n&1) == 0;
}
int gcd(int x, int y)//注意递归的基准情况和x,y同为偶数的情况
{
if(x<y)
{
return gcd(y,x);
}
if(y==0)
return x;
//以上两步为递归算法中的基准情况!!
if(isEven(x)&&isEven(y))
{
return (gcd(x>>1,y>>1))<<1;//x>>1 x/2
}else if(isEven(x)&&!isEven(y))
{
return gcd(x>>1,y);
}else if(!isEven(x)&&isEven(y))
{
return gcd(x,y>>1);
}else{
return gcd(y,x-y);
}
}