Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 这个带有两个递归调用的return语句是如何工作的?_C_Recursion - Fatal编程技术网

C 这个带有两个递归调用的return语句是如何工作的?

C 这个带有两个递归调用的return语句是如何工作的?,c,recursion,C,Recursion,我试图理解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); } }

我试图理解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);
    }
}

除了最后一行返回二项式(n-1,m-1)+二项式(n-1,m);,我什么都懂;。如果有人能解释发生了什么,我将不胜感激。我知道,真正理解代码在做什么有助于提高您的编码能力,这就是我想知道的原因。

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

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

  • 二项式系数C(n,k)也给出了从n个对象中选择k个对象的方法的数量,不管顺序如何;更正式地说,n-元素集的k-元素子集(或k-组合)的数量


  • 关于这一点,可以在维基百科的“二项式系数”下找到一个像样的解释。(). 这里有一个方程的链接:如果你直接用二项式级数展开,它是什么样子的?是的,有点像。看看帕斯卡三角形,你可以看到在一个结构中的二项式系数,每个系数都是上面两个系数的和
    n
    是行,
    m
    是“列”(如果每行的最左边是列0)。通过一点代数,您可以证明该语句是正确的;也就是说,二项式(n,m)=二项式(n-1,m)+二项式(n-1,m-1)(当m>0且n>=m时)。这行代码使函数递归到n=m=0。