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));
//  } 
//}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容