C程序解释中的二项式系数

时间:2016-02-01 00:40:42

标签: c binomial-coefficients

所以我必须编写一个打印出11个10阶二项式系数的程序。我遇到了这个能够完成我需要的代码,但我试图理解它为什么会起作用。

    #include<stdio.h>

int binomialCoeff(int n, int k)
{
    if(k == 0)return 1;
    if(n <= k) return 0;

    return (n*binomialCoeff(n-1,k-1))/k;
}

int main()
{
    int k;
    for(k=10;k>=0;k-=1)
    {
          printf("%d\n", binomialCoeff(10, k));
    }

我明白为什么int主要部分有效,我只是不知道如何进行二项式Coeff计算。我对所有这些编码都比较新,所以谢谢你的帮助!

1 个答案:

答案 0 :(得分:5)

这实际上非常优雅。

函数binomialCoeff是一个具有2个基本条件的递归函数。如果k == 0,则只返回1。如果n<=k返回0,那么如果其中的非为真,则通过从nk中减去一个来回忆相同的函数。这重复导致

n *(binomialCoeff(n-1,k-1))/ k

所以说N是10而K是7

你得到了

 10*(binomialCoeff(9,6)/7)

为了简单起见,我们第一次调用binomialCoeff时称为res1。这简化了:

10*(res1/6)

res1本身会调用binomialCoeff

导致

 9*(binomialCoeff(8,5)/6)

我们可以致电res2

所以我们得到了

10*(res2/6)

等等,直到你满足基本条件;导致一系列n成倍增加。