无法在 C++ 中使用带有 -O3 选项的 clang 进行尾递归

问题描述

我无法告诉 clang 编译器在我的 C++ 代码中执行尾递归优化。我看到了这篇文章 Which,if any,C++ compilers do tail-recursion optimization?,其中的建议是在 clang 中使用 -O3 标志,它会这样做。但尽管如此,对于以下素性测试代码的大量输入,我还是遇到了堆栈溢出问题。

$keys = array_unique(array_merge(array_keys($array1),array_keys($array2)));

$result = array();
foreach ($keys as $key) {
    $result[$key]['dates'] = array_merge($array1[$key]['dates'] ?? [],$array2[$key]['dates'] ?? []);
}
print_r($result);

我现在正在阅读 SICP 的第 1 章,并且有一个关于使用 O(√n) 算法检查素性的练习 (1.22)。尾递归由 Scheme 标准强制执行,因此对于大输入没有问题,但我在 C++ 中做同样的问题,对于大数字,最小除数函数消耗堆栈。我正在使用 GMP 库进行大整数运算。

是否可以在这样的程序中强制执行尾递归?

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)