Czy Java obsługuje i optymalizuje połączenia rekurencyjne?
Powiedz, że mam funkcję rekurencyjną, która jest rekurencyjna.
System.out.println( sum(Arrays.asList(0, 1, 2, 3, 4, 5)) );
int sum(List<Integer> integers) {
if (integers.isEmpty())
return 0;
else
return integers.get(0) + sum(integers.subList(1, integers.size()));
}
Zastanawiam się, czy ta funkcjasum
będzie rosnąć na stosie lub czy zostanie zmieniony na pętlę (ponieważ jest to funkcja rekurencyjna)?
Właśnie przeczytałem, że Scala wykrywa takie połączenia i optymalizuje je, ale czy jest to rzecz wyłącznie Scala czy JVM w ogóle?