C程序解释中的二项式系数
Binomial Coefficient in C program explanation
所以我必须编写一个程序来打印出 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 main 部分有效,我只是不明白 binomialCoeff 的计算是如何进行的。我对所有这些编码内容都比较陌生,所以感谢您的帮助!
这其实很优雅。
函数binomialCoeff
是一个有2个基本条件的递归函数。如果 k == 0
,你 return 就 1
。如果 n<=k
你 return 0。所以如果那个的非为真,你通过从 n
和 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
相乘。
所以我必须编写一个程序来打印出 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 main 部分有效,我只是不明白 binomialCoeff 的计算是如何进行的。我对所有这些编码内容都比较陌生,所以感谢您的帮助!
这其实很优雅。
函数binomialCoeff
是一个有2个基本条件的递归函数。如果 k == 0
,你 return 就 1
。如果 n<=k
你 return 0。所以如果那个的非为真,你通过从 n
和 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
相乘。