Как реализовать рекурсию в Java?
Как правильно реализовать рекурсию в Java? Проблема с StackOverflowError
Всем привет! Пытаюсь разобраться с рекурсией в Java, но постоянно сталкиваюсь с ошибкой StackOverflowError. Подскажите, пожалуйста, как правильно организовать рекурсивный вызов метода, чтобы этого избежать?
Написал простую функцию для вычисления факториала числа, но при значении 10000 программа падает. Вот мой код:
public class RecursionTest {
public static int factorial(int n) {
if (n == 0) {
return 1;
}
return n * factorial(n - 1);
}
public static void main(String[] args) {
System.out.println(factorial(10000)); // StackOverflowError
}
}Я уже пробовал:
- Увеличить размер стека через параметры JVM (
-Xss2m), но это лишь отодвигает проблему, а не решает её. - Заменить
intнаlongиBigInteger— результат тот же, ошибка в стеке. - Попробовал хвостовую рекурсию (tail recursion), но Java, насколько я знаю, её не оптимизирует.
Ожидаю получить работающий рекурсивный метод для больших чисел (до 100000) без переполнения стека. Может быть, есть какой-то паттерн или альтернативный подход? Нужно ли в таких случаях использовать итерацию вместо рекурсии? Или есть способ заставить JVM оптимизировать рекурсию?
Заранее спасибо за помощь!
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги
10 лучших фреймворков Kotlin для веб-разработки в 2024