У вас неправильный второй случай
int binomial(int a,int b){
if(a < b) return 0;
else if(a == b || a == 0 ) return 1; // <------------
return binomial(a-1,b) + binomial(a-1,b-1);
}
Формула гласит "если n = k или k = 0" и в вашем коде a == n
и b == k
, поэтому вторая строка должна быть
else if(a == b || b == 0 ) return 1;
Обратите внимание, что лучшее именование могло бы предотвратить эту ошибку.
PS
Почему бы не другие определения биномиального коэффициента?
Ваши рассуждения верны для последнего определения, но не во-первых. Результатом всегда является целое число, поэтому знаменатель и знаменатель всегда таковы, что вы можете выполнить деление с использованием целочисленной арифметики. Вы скорее столкнетесь с проблемой получения ненужных огромных терминов для факториала.