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

如何把这个递归转换成循环

2012-03-12 
怎么把这个递归转换成循环void MSort(int Left,int Right){int Centerif(LeftRight){Center (Left + R

怎么把这个递归转换成循环
void MSort(int Left,int Right)
{
  int Center;
  if(Left<Right)
  {
  Center = (Left + Right)/2;
  MSort(Left,Center);
  MSort(Center+1,Right);
  Printf("%d %d %d\n",Left,Center+1,Right);
  }
}
谢谢达人~

[解决办法]
void MSort(int Left,int Right)
{
stack.push( Left );
stack.push( Right );

while( ! stack.empty() ) {
int r = stack.pop();
int l = stack.pop();
if( l < r ) {
int Center = ( l + r ) / 2;
stack.push( l );
stack.push( Center );
stack.puch( Center + 1 );
stack.puch( r );
Printf("%d %d %d\n",l,Center+1,r);
}
}
}
[解决办法]
如果要求输出结果顺序一样,可以将输出结果保留到另一个vector中最后输出就行了

void MSort(int Left,int Right)
{
Stack stack;

vector< int > result;
stack.push( Left );
stack.push( Right );

while( ! stack.empty() ) {
int r = stack.pop();
int l = stack.pop();
if( l < r ) {
int Center = ( l + r ) / 2;
stack.push( l );
stack.push( Center );
stack.push( Center + 1 );
stack.push( r );
result.push_back( l );
result.push_back( Center );
result.push_back( r );
}
}
int i = result.size() - 1;

while( i > 0 ) {
int r = result[ i-- ];
int center = result[ i-- ];
int l = result[ i-- ];
printf("%d %d %d\n",l,center+1,r);
}

}

热点排行