我不能谈论不同的编译器/解释器的确切实现细节,但一般来说尾部调用优化的操作如下:
通常,函数调用涉及以下内容:
但是当一个函数处于尾部位置时,这意味着你要返回你要调用的函数的结果,你可能会很棘手并且做
请注意,#1和#2实际上并不涉及任何工作,#3可能很棘手或简单,具体取决于您的实现,4-7不涉及您正在调用的函数中的任何特殊内容.还要注意,所有这些都会导致相对于调用堆栈的0堆栈增长,因此这允许infinte递归并且通常会加快一些速度.
还要注意,这种优化不仅可以应用于直接递归函数,还可以应用于共同递归函数,实际上也可以应用于尾部位置的所有调用.