Я использую следующие две функции для вычисления факториалов и комбинаций.Рекурсивная функция для вычисления комбинации и факториала
public static long Factorial(long n)
{
if (n == 0)
return 1;
else
return n * Factorial(n-1);
}
public static long combinations (long n, long k)
{
return Factorial(n)/(Factorial(k) * Factorial(n - k));
}
Я проверяю его с помощью:
long test = combinations((long)21, (long)13);
Это похоже на работу для небольших чисел, таких как 5,2
. Но если я попробую 21,13
, я получаю неправильные ответы (отрицательные или 0).
Кто-нибудь знает, что здесь происходит?
Какой язык/платформы это такое? –
Ваш ответ может быть здесь: http://stackoverflow.com/questions/849813/large-numbers-in-java –
Не уверен, что мне не хочется его вычислять, но я уверен, что вы столкнулись с условие переполнения. В принципе, долго не хватает мощности для хранения чрезвычайно большого числа, которое является 21 факториалом и, возможно, 13 факториалом. Для больших чисел, подобных этим, используйте класс BigInteger. –