首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-25 
麻烦帮个忙把这个尾递归改写成循环?C/C++ code//代码如下int gcd(int a, int b) {if(ab)return gcd(b,a)

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

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

热点排行