Tady ještě jak to konkrétně vypadá ve Scale:
@tailrec
private def fibonacciTail(n: Int, acc: (BigInt, BigInt)): BigInt = {
val (x, y) = acc
if (n == 0 || n == 1) y
else fibonacciTail(n - 1, (y, x + y))
}
def fibonacci(n: Int) = fibonacciTail(n, (1, 1))
Kompilátor aplikuje tail call optimalizace automaticky, @tailrec anotace pouze zajistí kontrolu, že daná metoda opravdu tail rekurzivní je (jinak compile error).