c++ - 递归函数是否有部分尾调用优化?

标签 c++ recursion optimization tail-recursion

如何在 g++ 上对不完全尾递归的函数进行尾调用优化?

例如:

void foo(Node *n) {
    if (n == nullptr) return;

    foo(n->left);
    cout << n->datum;
    foo(n->right);
}

这是 foo(n->left) 不是尾递归,但 foo(n->right) 是。有没有办法优化这个?

最佳答案

答案是:问问你的编译器,非常好。

C++ 规范允许编译器实现任何优化,只要可观察的结果保持不变。

在所示代码中,部分尾部优化显然会产生相同的可观察结果。它是否真的发生,完全取决于你的编译器。 C++ 规范不要求编译器在这里执行尾部优化,但也不禁止它。这完全取决于您的编译器,现代 C++ 编译器很可能会在足够积极的优化级别上执行此操作。

关于c++ - 递归函数是否有部分尾调用优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40954662/

相关文章:

c++ - 当 VISUAL_ID 和 screen->root_visual 不相等时,glXCreateWindow 不起作用

c++ - 关于在 C/C++/Assembly 中返回多个值

php - 如何返回给定字符串的所有组合? (例如 'foo bar' = bar、bar_foo、foo)

mysql - 如何索引 100 万行 mySQL 表以进行简单查询

c++ - 严格的别名和内存对齐

c++ - 创建具有均值和标准差的高斯随机发生器

asp.net - 如何使用asp.net中的菜单控件从数据库创建动态菜单?

计算二叉搜索树中的比较次数

Mysql,将索引用于带有运算符>,<的选择是否会提高性能?

从某个偏移量开始检查文件而不读取整个文件