c++ - 尾递归优化
问题描述
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;
}
解决方案
推荐阅读
- sql - IBM DB2 on Cloud - 运行 SQL 语句时缺少“结果集”选项卡
- elasticsearch - 如何按包含 ElasticSearch 中移动日期的派生值排序?
- angular - AngularFire2获取类型特定对象的Observable
- c++ - Boost 1.61 标头正在尝试重新定义 mpl_::bool_
- php - 为什么我不能识别假的?
- python - 在结构化数组中使用 numpy.datetime64 的 TypeError
- java - 使用抽象类和 super()
- arrays - 如何为配置单元表中的数组结构设置 Ranger 策略
- python - 如何解决列表索引超出范围错误?(如果这不是一个好问题,我很抱歉,但我找不到任何答案)
- php - 如何使用 PHP 在电子邮件中发送 HTML 表格?