Я пытаюсь написать программу Java для вычисления факториала большого числа. Кажется, BigInteger
не может удерживать такое большое количество.StackOverflowError вычисляет факториал BigInteger?
Ниже приведен код (прямолинейный), который я написал.
public static BigInteger getFactorial(BigInteger num) {
if (num.intValue() == 0) return BigInteger.valueOf(1);
if (num.intValue() == 1) return BigInteger.valueOf(1);
return num.multiply(getFactorial(num.subtract(BigInteger.valueOf(1))));
}
Максимальное количество выше программа обрабатывает в 5022, после того, что программа бросает StackOverflowError
. Есть ли другие способы справиться с этим?
Это не может быть самым большим для типов данных BigInteger. Где выбрано исключение stackoverflow? Опубликуйте более подходящий код. – JonH
Да, используйте итерационный алгоритм. BigInteger все в порядке, getFactorial просто съел все пространство стека. – harold
@harold (+1) - еще один пример того, почему я считаю, что рекурсия - это вредная техника для обучения студентов колледжа, по крайней мере, на языках без возврата хвоста. Это интеллектуальное упражнение, но в конечном счете не полезно ни для чего интересного. – CPerkins