所以我必须编写一个打印出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计算。我对所有这些编码都比较新,所以谢谢你的帮助!
答案 0 :(得分:5)
这实际上非常优雅。
函数binomialCoeff
是一个具有2个基本条件的递归函数。如果k == 0
,则只返回1
。如果n<=k
返回0,那么如果其中的非为真,则通过从n
和k
中减去一个来回忆相同的函数。这重复导致
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
成倍增加。