2 gig886 gig886 于 2014.12.09 16:51 提问

C++递归改循环的问题。

函数的代码如下:

 void divconqrecurse(struct mesh *m, struct behavior *b, vertex *sortarray,
                    int vertices, int axis,
                    struct otri *farleft, struct otri *farright)
{
  struct otri innerleft, innerright;
  int divider;
  if (vertices == 2) 
  {
    //结束语句--------对farleft,farright赋值
    //用到的相关参数,sortarray,m,b;
    return;
  }
  else if (vertices == 3) 
  {
    //结束语句--------对farleft,farright赋值
    //用到的相关参数,sortarray,m,b;
    return;
  } 
  else 
  {
    divider = vertices >> 1;
    divconqrecurse(m, b, sortarray, divider, 1 - axis, farleft, &innerleft);
    divconqrecurse(m, b, &sortarray[divider], vertices - divider, 1 - axis,
                   &innerright, farright);
    mergehulls(m, b, farleft, &innerleft, &innerright, farright, axis);
  }
}

1个回答

devmiao
devmiao   Ds   Rxr 2014.12.09 18:20

能不能修改为循环的关键在于mergehulls这个函数是干嘛的,能不能调换调用顺序。将递归修改为尾递归,只有尾递归才可以转换为循环。
如果不能转换为尾递归,那么只能用堆栈模拟函数调用强行转换。

gig886
gig886 应该是不能调换顺序的,我就是用堆栈模拟来改的。但是用堆栈模拟的时候不知道参数innerleft和innerright怎么处理
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片