首页 > 解决方案 > 尾递归优化

问题描述

more当函数和相互调用时,如何启用尾递归优化vals

现在,当我设置n = 5时,但是当我设置时n = 50000000,它会发生错误。

using Cb = std::function<void(bool, int)>;
using Read = std::function<void(bool, Cb)>;
using Sink = std::function<void(Read&)>;
using Through = std::function<Read(Read&)>;

int main() {
    int n = 5;

    Read vals = [&](bool abort, Cb cb) {
        if (n-- <= 0) {
            return;
        }
        cb(false, n); // call `more` function
    };

    Sink logInt = [&](Read &read) {
        Cb more;
        more = [&](bool abort, int val) {
            cout << val << endl;
            read(false, more); // call `vals` function
        };

        read(false, more);
    };

    logInt(vals);


    return 0;
}

整个真实的代码示例

标签: c++c++11c++14

解决方案


推荐阅读