题目:《编程之美》 P150
//辗转相除法
int GCD1(int a,int b)
{
if (a < b)
swap(a, b);
if (b == 0)
return a;
return GCD1(a % b, b);
}
//利用减法
int GCD2(int a, int b)
{
if (a < b)
swap(a, b);
if (b == 0)
return a;
return GCD2(a - b, b);
}
//方法一和方法二相结合
int GCD3(int a, int b)
{
if (a < b)
swap(a, b);
if (b == 0)
return a;
bool marka = a & 1, markb = b & 1;
if (marka && markb)
{
return GCD3(a - b, b);
}
else if (!marka && !markb)
{
return ( GCD3(a >> 1, b >> 1) )<<1;//不要忘了乘以2
}
else if (!marka && markb)
{
return GCD3(a >> 1, b);
}
else
{
return GCD3(a, b >> 1);
}
}