函数的代码如下:
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);
}
}
能不能修改为循环的关键在于mergehulls这个函数是干嘛的,能不能调换调用顺序。将递归修改为尾递归,只有尾递归才可以转换为循环。
如果不能转换为尾递归,那么只能用堆栈模拟函数调用强行转换。