最近在学习Date结构。 在 Mark Allen Weiss 的书中,Data structures and Algorithm Analysis in C,为什么他说尾递归是对递归的错误使用,最好不要在第 3 章中使用它?但是网上看到很多人说有用。
最佳答案
不一定是坏事。尾递归始终等同于循环,显式编写循环可以更高效,具体取决于编译器。(*) GCC 等现代编译器可以优化尾递归,但它们并不总是能识别它。当他们看不到它时,递归将消耗堆栈空间。
也就是说,像快速排序这样的算法自然是递归表示的,它的两个递归之一是尾递归。我会在第一遍递归地编写它,如果我发现它太慢了,然后将其重写为一个循环。
当算法只有一个递归(尾递归)时,立即将其编写为循环可能仍然是个好主意,因为递归函数比循环更难调试。
(*) 我假设我们只讨论 C。在其他一些语言中,尾递归要么被认为是循环的自然方式(函数式语言),要么被认为是一种完全令人厌恶的方式(Python)。
关于algorithm - 为什么尾递归是对递归的错误使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18723336/