小编Mat*_*gue的帖子

如何使此函数尾递归?

我试图使该函数尾部递归,以便我可以使用它来处理大量事件而不会导致堆栈溢出。我确保将递归调用放在函数的最后一行,但是它仍然使递归调用充满了调用堆栈。

我还需要做些其他事情来使其尾部递归,还是我的编译器不知道如何对其进行优化?

我应该放弃此功能,而是使用循环吗?

template <class Csi>
void GetEvents(EventHandle handle, vector<int> desiredCodes, vector<EventHandle> &events, Csi &csi)
{
    if (handle == INVALID_HANDLE)
    {
        return;
    }

    int code = csi.GetEventCode(handle);
    bool codeSatisfiesSearch = (find(desiredCodes.begin(), desiredCodes.end(), code) != desiredCodes.end());
    if (codeSatisfiesSearch)
    {
        events.push_back(handle);

        handle = csi.FindNextEventEx(handle, &desiredCodes[0], 0, desiredCodes.size());
    }
    else
    {
        handle = csi.FindNextEventEx(handle, &desiredCodes[0], 0, desiredCodes.size());
    }
    return GetEvents(handle, desiredCodes, events, csi);
}
Run Code Online (Sandbox Code Playgroud)

recursion tail-recursion c++11

3
推荐指数
1
解决办法
114
查看次数

标签 统计

c++11 ×1

recursion ×1

tail-recursion ×1