4

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

4

1 回答 1

4

这实际上非常优雅。

该函数binomialCoeff是具有 2 个基本条件的递归函数。如果k == 0,你回来就好1。如果n<=k您返回 0。因此,如果非为真,您可以通过从nand中减去 1 来调用相同的函数k。这重复导致

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' 相乘。

于 2016-02-01T00:50:53.247 回答