Tail call optimisation (TCO)
avoid allocating a new stack frame for a function because the calling function will simply return the value that it gets from the called function. The most common use is tail-recursion, where a recursive function written to take advantage of tail-call optimization can use constant stack space. - SO
see also
- Why tail-recursive functions are loops - One surprising fact is that we can systematically compile any program so that every call is a tail-call, by completely transforming the program into continuation-passing-style (CPS), this essentially eliminates the stack.
TCO transformation
Fibonacci
def fibo(n, a, b)
(n > 0) ? fibo(n - 1, b, a + b) : a;
end
Ruby Tail Call Optimization?
The Ruby Language Specification doesn’t say anything about TCO. It doesn’t say you have to do it, but it also doesn’t say you can’t do it.
-
This is unlike Scheme, where the Language Specification requires that all Implementations must perform TCO.
-
But it is also unlike Python, where Guido van Rossum has made it very clear on multiple occasions (the last time just a couple of days ago) that Python Implementations should not perform TCO.