Задать вопрос
Trame2771
@Trame2771

Почему StackOverFlowError?

class Factorial {
	int factor(int n) {
		if (n != 1)
			return factor(n-1) * n;
		else
			return 1;
	}
}

class Main {
	public static void main(String[] args) {
		Factorial f = new Factorial();
		
		for (int i = 0; i < 1; i++) {
			System.out.println(f.factor(i));
		}
	}
}


Исполняется код на андроид приложении Jvdroid.

Если убрать цикл, и аргумент заменить на 10, то все работает
  • Вопрос задан
  • 118 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
GavriKos
@GavriKos
Отладку в зубы и дебажить.
Передаете в фактор 0. Срабатывает if. Дальше он вызывает factor с -1. И так до stack overflow.
У факториала нуля обычно своя обработка ;-)
Ответ написан
Комментировать
xez
@xez Куратор тега Java
TL Junior Roo
У вас рекурсия уходит в минус бесконечность при n = 0.
Именно это значение туда попадет в первой итерации цикла.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы