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 не оптимизирует хвостовую рекурсию (но Python без стека), и C ++ не требует оптимизации хвостовой рекурсии, но я считаю, что gcc оптимизирует хвостовую рекурсию JVM не оптимизирует хвостовую рекурсию, хотя в некоторых распространенных документированных случаях это делает язык Scala. Scheme и Lisp (и, возможно, другие функциональные языки) требуют оптимизации хвостовой рекурсии.