转换递归函数



我在这里具有递归函数,但是它会导致溢出错误,因此我需要将其更改为非收回函数。关于如何做的任何帮助将不胜感激!

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

通常,如果您具有溢出堆栈的树回收功能,这是一种直接的方法,将其转换为非收集者(而不是使用堆)是基本上分配的您自己的堆栈。

每当您的函数都会用一些参数调用自己时,而是将这些参数塞入struct中,然后将struct推入工作队列(我说"队列",但实际数据结构可以是std::stackstd::queue无论您是要以LIFO或FIFO订单处理项目)。现在,您可以在迭代循环中调用您的函数:迭代该队列直到空为空,弹出每组参数并使用它们调用您的功能(这可以在工作队列中添加新项目)。

最新更新