оптимизация хвостовой рекурсии - PullRequest
1 голос
/ 29 января 2020

как включить оптимизацию хвостовой рекурсии, когда функции 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;
}

пример всего реального кода

...