算法或者代码

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));
//  } 
//}
上一篇下一篇

猜你喜欢

热点阅读