Python 对递归调用有一个可调的限制,而 C++ 则受堆栈大小的限制。
此外,许多语言或编译器可以通过删除调用者的堆栈帧来优化尾递归,这样就不会消耗额外的堆栈空间。(在尾递归中,调用函数唯一要做的就是在进行递归调用之后返回递归调用的返回值。)
int fact(int n, int accum=1){
if (n==0) return accum;
else return fact(n-1,n*accum); //tail recursion here.
}
Python不优化尾递归(但是stackless Python可以),C++不需要尾递归优化,但我相信gcc优化了尾递归。JVM 不会优化尾递归,尽管 Scala 语言在某些常见的文档案例中会这样做。Scheme 和 Lisp(可能还有其他函数式语言)要求优化尾递归。