PHP优化尾递归吗?
PHP是否优化尾递归?
在PHP中可以调用递归函数。然而,要避免递归函数/方法调用超过100-200次递归层级,因为它可能会破坏堆栈并导致当前脚本的终止。
似乎可以认为PHP不会优化尾递归。编程语言是否有堆栈限制是很常见的问题,而且在实际上任何语言中,一个编写不良的递归函数都会遇到相同的问题。但是,尾递归改变了这一点(如果支持的话)。
关于堆栈限制,我认为答案是关于尾递归这一点的。当然,编程语言有堆栈限制,但是尾递归会被优化为非递归跳转,因此不应该耗尽堆栈。因此,事实上提到了递归深度的限制,意味着没有尾递归。
虽然这是正确的,但人们会期望上面的段落中指出尾递归的特殊情况。由于没有提到,我们可以安全地假设PHP没有针对尾递归的特殊情况。
“尾递归被优化为非递归跳转,因此不应该耗尽堆栈”,这是正确的,但并不是每个递归调用都是尾递归的。因此,“提到递归深度的限制”并不意味着编译器/解释器不优化尾递归。