转换递归函数

时间:2016-12-02 00:58:33

标签: c++ recursion linked-list mergesort

我这里有一个递归函数,但它导致溢出错误,所以我需要将它改成非递归函数。任何有关如何做到这一点的帮助将不胜感激!

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

1 个答案:

答案 0 :(得分:1)

通常,如果你有一个树形递归函数溢出你的堆栈,一种直接的方法将它转换为非递归函数(而不是使用堆)是基本上分配你自己的堆栈。

每次你的函数都会用一些参数调用自己,而是将这些参数填充到CategoryValues中,并将struct推入工作队列(我说“队列”,但实际的数据结构可以是structstd::stack,具体取决于您是要处理LIFO或FIFO顺序中的项目。现在你可以在一个迭代循环中调用你的函数:迭代该队列直到它为空,弹出每组参数并用它们调用你的函数(可以将新项添加到工作队列中)。