#include<stdio.h>
long Comb(int m,int k); //计算组合数函数
long Fact(int n); //线性算法计算阶乘
long Fact(int n)
{
int i;
long result = 1;
for(i=2;i<=n;i++)
{
result*=i;
}
return result;
}
long Comb(int m,int k)
{
return Fact(m)/(Fact(k)*Fact(m-k));
}
int main()
{
int m,k;
do{
printf("Input m,k(m>=k>0):");
scanf("%d,%d",&m,&k);
}while(m<k || m<0 || k<0);
printf("%ld\n",Comb(m,k));
return 0;
}
递归方式计算阶乘
<pre name="code" class="cpp">long Fact(int n)
{
if(n<0)
return -1;
else if(n==0 || n==1)
return 1;
else
return n*Fact(n-1);
}
来自哈尔滨工业大学MOOC课件