如何在 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/