la salida de este Scala-código:¿Por qué es esta cola recursiva?
def rec(n: Int) {
if (n > 1) {
val d = n/2
rec(d)
// if (d > 1) // abort loop
rec(n/d)
}
}
Este código se traducirá en un bucle sin fin. Debido a la optimización recursiva de la cola, no obtengo un StackOverflowError.
decompilados JAD Tengo este código Java:
public void rec(int n)
{
int d;
for(; n > 1; n /= d)
{
int i = n;
d = i/2;
rec(d);
}
}
En la última línea del bucle el método llama a sí misma, por tanto, no entiendo la posición llamada de cola. ¿Alguien que pueda explicar esto?
Esto será útil 1.http: //www.cs.wayne.edu/~artem/main/teaching/csc3200ss2006/slides/recursion/types.html 2.http: //stackoverflow.com/questions/ 105834/does-the-jvm-prevent-tail-call-optimizations –