У меня есть рекурсивный алгоритм (в трех разных формах), который вычисляет сумму первых n нечетных положительных целых чисел. Эти алгоритмы предназначены только для обучения, я знаю, что есть лучшие способы решения этой проблемы. Я написал три варианта в Lua и Java, которые я буду называть Lua 1, Lua 2, Lua 3 и Java 1, Java 2 и Java 3. Первые два очень похожи, просто перестроены.Рекурсия в Lua vs. Java
Программы Lua - here, а программы Java - here.
Lua 1 и 2 работают очень хорошо и могут легко достигать n = 100 000 000. Lua 3 попадает в переполнение стека, где n> 16 000.
Java 1 может достигать n = 4000 до того, как ударить стек, пока Java 2 достиг 9000. Java 3 удалось получить до n = 15 000, прежде чем снова нанести переполнение стека.
Может ли кто-нибудь объяснить эти результаты? Почему Java 1, 2 и 3 работают так плохо, в то время как Lua 1 и 2 выполнены так хорошо?