麻烦帮个忙把这个尾递归改写成循环?
- C/C++ code
//代码如下int gcd(int a, int b) { if(a<b) return gcd(b,a); if(b==0) return a; else { if(is_even(a)) { if(is_even(b)) return (gcd(a>>1,b>>1)<<1); else return gcd(a>>1,b); } else { if(is_even(b)) return gcd(a,b>>1); else return gcd(b,a-b); } }}谢谢!
[解决办法]
int gcdw(int a, int b)
{
int d = 1, t;
while(true) {
if(a<b)
swap(a, b);
if (b == 0)
return a*d;
if(is_even(a))
{
if(is_even(b))
{a = a>>1; b = b>>1; d *= 2; }
else
a>>=1;
}
else
{
if(is_even(b))
b = b>>1;
else
{ t=a; a = b; b = t-b; }
}
}
}