С n=9
и k=6
вы вычисляете factorial(14)
, равное 87,178,291,200
, которое переполняет 4-байтовый int
Вам нужно использовать что-то вроде long long
, чтобы получить 8-байтовый int
, если вы хотите использовать эту формулу.
Существуют лучшие формулы для вычисления биномиальных коэффициентов, которые не основаны на вычислении полных факториалов, чем при делении. См. Биномиальный коэффициент в языках программирования , прямой метод (вместо использования рекурсии).
В C ++ вы можете использовать:
int binomial(int N, int K) {
if( K > N - K )
K = N - K;
int c = 1;
for(int i = 0; i < K; ++i) {
c *= (N - i);
c /= (i + 1);
}
return c;
}