我这里有一个递归函数,但它导致溢出错误,所以我需要将它改成非递归函数。任何有关如何做到这一点的帮助将不胜感激!
void MergeSort(struct node** headRef)
{
node* head = *headRef;
node* a;
node* b;
if ((head == NULL) || (head->next == NULL))
{
return;
}
FrontBackSplit(head, &a, &b);
MergeSort(&a);
MergeSort(&b);
*headRef = SortedMerge(a, b);
}
答案 0 :(得分:1)
通常,如果你有一个树形递归函数溢出你的堆栈,一种直接的方法将它转换为非递归函数(而不是使用堆)是基本上分配你自己的堆栈。
每次你的函数都会用一些参数调用自己,而是将这些参数填充到CategoryValues
中,并将struct
推入工作队列(我说“队列”,但实际的数据结构可以是struct
或std::stack
,具体取决于您是要处理LIFO或FIFO顺序中的项目。现在你可以在一个迭代循环中调用你的函数:迭代该队列直到它为空,弹出每组参数并用它们调用你的函数(可以将新项添加到工作队列中)。