CPP - 二项式系数 - 我得到错误的结果

CPP - Binomial Coefficient - i get wrong results

任务: 编写并测试计算二项式系数的 C++ 函数。 给出了二项式系数的三个定义(见下图)。 我个人使用中间的定义。

我的问题: 但问题是,我得到了错误的结果。 5 比 2 必须是 10 我得到的是 26。

为什么不是二项式系数的其他定义? 因为在另外两个中每个定义中都有一个分数,我担心在 C++ 中做除法会出现舍入错误。这就是为什么我选择了中间的定义。

我的代码:

    #include <iostream>


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);
}




int main(){

int n; 
int k;
std::cin >> n;
std::cin >> k;

std::cout << "Binomial of " << n << " and " << k << " equals = " << binomial(n,k) << std::endl;

  return 0;
}

给出了三个二项式系数的定义:

第二种情况你错了

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);
}

公式表示 "if n=k or k=0",在您的代码中 a == nb == k,因此第二行应该是

else if(a == b || b == 0 ) return 1;

请注意,更好的命名本可以避免该错误。

PS

Why not other Definitions of Binomial Coefficient?

你的推理对最后一个定义是正确的,但对第一个定义不正确。结果始终是一个整数,因此分母和分母总是这样,您可以使用整数算术进行除法。您宁愿 运行 陷入一个问题,即获得不必要的巨大阶乘项。