【问题标题】:How does this return statement with two recursive calls work?这个带有两个递归调用的返回语句是如何工作的?
【发布时间】: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。

标签: c recursion


【解决方案1】:

以下是二项式系数的常见定义:

  1. 一个二项式系数C(n, k)可以定义为X^k在(1 + X)^n的展开中的系数。

  2. 二项式系数 C(n, k) 还给出了可以从 n 个对象中选择 k 个对象的方式数,无论顺序如何;更正式地说,是 n 元素集合的 k 元素子集(或 k 组合)的数量。

【讨论】:

    猜你喜欢
    • 2018-12-27
    • 2018-11-07
    • 2012-10-06
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多