Из того, что я прочитал: причина в том, что нелегко определить, какой метод на самом деле будет вызываться, поскольку у нас есть наследование.
Однако почему в Java, по крайней мере, нет оптимизации хвостовой рекурсии для статических методов и не реализован надлежащий способ вызова статических методов с помощью компилятора?
Почему Java вообще не поддерживает хвостовую рекурсию?
Я не уверен, есть ли здесь какие-либо трудности.
Что касается предложенного дубликата , как объяснил Йорг Миттаг 1 :
- Другой вопрос спрашивает о TCO, этот о TRE. TRE намного проще, чем TCO.
- Кроме того, другой вопрос задает вопрос о том, какие ограничения накладывает JVM на языковые реализации, которые хотят компилировать в JVM, этот вопрос задается о Java, который является единственным языком, который не ограничен JVM, поскольку спецификация JVM может быть изменена с помощью те же люди, которые проектируют Java.
- И, наконец, в JVM нет даже ограничений на TRE, потому что у JVM есть GOTO внутри метода, и это все, что нужно для TRE.
1 Добавлено форматирование, чтобы вызвать сделанные пункты.