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

Binomial Coefficient in C program explanation

所以我必须编写一个程序来打印出 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 main 部分有效,我只是不明白 binomialCoeff 的计算是如何进行的。我对所有这些编码内容都比较陌生,所以感谢您的帮助!

这其实很优雅。

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

n * (二项式系数(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 相乘。