Pelo que li: O motivo é que não é fácil determinar qual método será chamado de fato, pois temos herança.
No entanto, por que o Java pelo menos não possui otimização de recursão de cauda para métodos estáticos e aplica a maneira correta de chamar métodos estáticos com o compilador?
Por que o Java não tem nenhum suporte para recursão de cauda?
Não tenho certeza se há alguma dificuldade aqui.
Em relação à duplicata sugerida , conforme explicado por Jörg W Mittag 1 :
- A outra pergunta é sobre o TCO, essa sobre o TRE. O TRE é muito mais simples que o TCO.
- Além disso, a outra pergunta pergunta sobre quais limitações a JVM impõe às implementações de linguagem que desejam compilar com a JVM, esta pergunta sobre Java, que é a única linguagem que não é restrita pela JVM, pois a especificação da JVM pode ser alterada por as mesmas pessoas que projetam Java.
- E, finalmente, não há sequer uma restrição na JVM sobre o TRE, porque a JVM possui GOTO intra-método, que é tudo o que é necessário para o TRE
1 Formatação adicionada para destacar pontos feitos.