Creer que la recursion de cola arregla el StackOverflowError en Java
static long suma(int n, long acc) {
if (n == 0) return acc;
return suma(n - 1, acc + n); // es de cola...
}
// suma(1_000_000, 0) -> StackOverflowError
La JVM no elimina llamadas de cola. Este metodo apila un millon de marcos igual que cualquier otro.
static long suma(int n) {
long acc = 0;
for (int i = n; i > 0; i--) acc += i;
return acc;
}