问题标签 [infinite-recursion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
52 浏览

c++ - 这个递归模板函数可以编译吗?

我有这段代码应该实现埃拉托色尼筛。从所有数字 >= 2 开始。获取第一个数字 (2),打印它并删除它的所有倍数。获取第二个数字 (3),打印并删除它的所有倍数。等等。

递归仅限于显示小于 100 的素数。或者是吗?

我认为这段代码是完全有效的,但永远不会完成编译。

这样做的原因是auto sievenext 中的论点而if (prime < limit)不是constexpr. 在编译器的每个实例中next,都必须验证对模板参数的递归调用next并推断出模板参数,并且递归永远不会结束。

我是对的还是只是不耐烦?它现在编译了2个多小时,到目前为止消耗了4GB的内存。

如果是这样,有没有办法使递归终止?某种形式的类型擦除?最终目标是建立所有素数的无限范围/视图。

更新:使用无限范围是有意的,没有它就不要提出解决方案。最终目标是无限范围的质数,当您迭代该范围时会懒惰地评估。