我一直在寻找一个简单的二项式系数算法,但无济于事。问题是我用于课堂的语言有点奇怪。很多都是使用Yacc和Lex。
无论如何我们在课堂上做了一个例子:
n=12; p=1; i=1;
while (i <= n) {
p = p * i;
print p;
i = i + 1;
};
这是计算阶乘的一个例子,但现在我需要修改它以便能够计算C(n,k)或N选择K(又名二项式系数),但我不应该有多复杂我应该做到。我们可以选择任何N和K(用户不必输入它们),因此任何随机的2个数字都可以工作(例如上面的例子)。我很确定这段代码只支持基本函数,例如while循环和基本数学,所以我不认为使用阶乘是可能的......但我想我可以使用上面的代码吗?
有什么想法吗?
答案 0 :(得分:2)
由于我假设这是作业,我不打算提供解决方案。我要说的是:
C(n,k)有一个公式,它依赖于除法,减法,乘法和阶乘:
n!/(k!(n-k)!)
您已经拥有可以计算阶乘的代码,看起来您使用的语言支持您需要的其他数学运算符。
所以你要做的就是计算三个因子:一个用于n
,一个用于k
,一个用于n-k
。
答案 1 :(得分:0)
如果您需要插件库来为您完成工作,您可以随时使用Boost库:http://www.boost.org/doc/libs/1_35_0/libs/math/doc/sf_and_dist/html/math_toolkit/special/factorials/sf_binomial.html