WarMj:直接公式法、递归法求组合数
2017-07-17 本文已影响3人
WarMj
组合数定义
公式一(直接公式法) 公式二(递归法) 计算条件一 计算条件二代码分析
#include<stdio.h>
#include<stdlib.h>
//函数声明
int fact(int n);//阶乘函数,公式法使用
int combination(int n, int r);//返回组合数
int judge(int n, int r);//判断输入值合理性
int main()
{
int n, r;
scanf("%d %d", &n, &r);
if(judge(n, r))
{
printf("%d\n", combination(n, r));
}else
{
printf("Wrong Number!\n");
}
system("pause");
return (0);
}
//判断输入值合理性
int judge(int n, int r)
{
if(n < r || n < 0 || r < 0)
{
return (0);
}else
{
return (1);
}
}
//求阶乘
int fact(int n)
{
int i = n;
while(i > 1)
{
n *= --i;
}
return (n);
}
//直接公式法
int combination(int n, int r)
{
return (fact(n) / (fact(r) * fact(n-r)));
}
//递归法
//int combination(int n, int r)
//{
// if(r == 0 || n == r)
// {
// return (1);
// }else
// {
// return (combination(n-1, r-1) + combination(n-1, r));
// }
//}