¿Cómo funciona @tailrec?
He usado y leído sobre@tailrec
Anotación para tener un método recursivo de cola. He pasado por muchos enlaces que lo explican. Por ejemplo, solo funciona cuando se realizan funciones de auto llamada y no se debe anular, etc.
En todas partes se menciona que lacompiler optimizes
. Pero, ¿qué magia / concepto hace el compilador para hacerlo recursivo? Para una función simple a continuación, ¿qué hace el compilador:
@tailrec def fact(acc: Int, n: Int): Int = {
if (n <= 1) acc
else fact(n * acc, n - 1)
}
fact(1,10)
Quiero decir, ¿lo convierte en un bucle donde lo llama repetidamente y luego devuelve el valor final? ¿Hay algún enlace al papel que lo explique?