读书人

麻烦帮个忙把这个尾递归改写成循环?解

发布时间: 2012-03-25 20:55:16 作者: rapoo

麻烦帮个忙把这个尾递归改写成循环?

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; }
}
}
}

读书人网 >C++

热点推荐