【发布时间】:2021-04-28 04:40:33
【问题描述】:
我正在尝试用 C 来理解这个二项式系数递归代码。
int binomial(int n, int m){
if(m == n){
return 1;
}
else if (m == 0){
return 1;
}
else if (m>n){
return 0;
}
else{
return binomial(n-1,m-1) + binomial(n-1,m);
}
}
除了最后一行 return binomial(n-1,m-1) + binomial(n-1,m); 之外,我了解所有内容。如果有人能够解释正在发生的事情,我将不胜感激。我知道真正理解代码在做什么有助于提高你的编码能力,所以这就是我想知道的原因。
【问题讨论】:
-
可以在维基百科的“二项式系数”下找到一个不错的解释。 (en.wikipedia.org/wiki/Binomial_coefficient)。这是方程式的链接:wikimedia.org/api/rest_v1/media/math/render/svg/…
-
如果你把一个二项级数展开,它是什么样子的?是的,有点像。
-
看看帕斯卡三角,在那里你可以看到一个结构中的二项式系数——每个系数都是上面两个的总和。
n是行,m是“列”(如果每行的最左边是第 0 列)。 -
通过一点代数,你可以证明这个陈述是正确的;也就是说,二项式(n,m)=二项式(n-1,m)+二项式(n-1,m-1)(当m>0且n>=m时)。这行代码让函数递归到 n=m=0。