0

我一直在寻找一个简单的二项式系数算法,但无济于事。问题是我上课使用的语言有点……奇怪。其中很多是使用 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循环和基本数学,所以我认为不可能使用阶乘......但我想我可以使用上面的代码吗?

有任何想法吗?

4

2 回答 2

2

由于我假设这是家庭作业,因此我不打算提供解决方案。我要说的是:

C(n,k) 有一个公式,它依赖于除法、减法、乘法和阶乘:

n!/(k!(n-k)!)

您已经有了可以计算阶乘的代码,而且您使用的语言看起来支持您需要的其他数学运算符。

所以你所要做的就是计算三个阶乘:一个 for n,一个 fork和一个 for n-k

于 2010-11-11T20:08:06.740 回答
0

如果您需要一个插件库来为您完成这项工作,您总是可以使用 Boost 库:http: //www.boost.org/doc/libs/1_35_0/libs/math/doc/sf_and_dist/html/math_toolkit/special/阶乘/sf_binomial.html

于 2011-05-06T16:47:47.257 回答