为什么去除尾递归是有益的?
只是一个整体的数据结构问题:为什么在快速排序中专门删除尾递归是有益的,即使它不会改变复杂性?
回答
在最坏的情况下,快速排序需要 O(N 2 ) 时间。
在最坏的情况下,如果每个调用在两半上分别递归,它也需要 O(N) 堆栈空间。
这在调用堆栈上浪费了太多空间。
快速排序的实际实现在较小的一半上递归,然后循环对较大的一半进行排序。这将最坏情况下的堆栈消耗限制在最坏情况下为 O(log N),这是非常合理的。
如果你被要求对一个包含 100000000 个项目的数组进行排序,那么你的调用深度 27 级是可以的,但它们深度 10000000 级绝对不行。