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 == n
和 b == k
,因此第二行应该是
else if(a == b || b == 0 ) return 1;
请注意,更好的命名本可以避免该错误。
PS
Why not other Definitions of Binomial Coefficient?
你的推理对最后一个定义是正确的,但对第一个定义不正确。结果始终是一个整数,因此分母和分母总是这样,您可以使用整数算术进行除法。您宁愿 运行 陷入一个问题,即获得不必要的巨大阶乘项。
任务: 编写并测试计算二项式系数的 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 == n
和 b == k
,因此第二行应该是
else if(a == b || b == 0 ) return 1;
请注意,更好的命名本可以避免该错误。
PS
Why not other Definitions of Binomial Coefficient?
你的推理对最后一个定义是正确的,但对第一个定义不正确。结果始终是一个整数,因此分母和分母总是这样,您可以使用整数算术进行除法。您宁愿 运行 陷入一个问题,即获得不必要的巨大阶乘项。