组合数算法分析 以10选4为例

本文通过C语言实现了一个求解组合数的递归算法,以10选4为例,详细解释了算法思路。算法的核心是每次选取最高位的数,然后递归地在剩余元素中寻找m-1个数。递归终止条件是m大于1,最终输出所有可能的组合。
摘要由CSDN通过智能技术生成


#include<stdio.h>
        #include<stdlib.h>
        #define M 4
        int main()
        {   const int N=10;
            void combie(int a[],int b[],int n,int m);
            int b[M];
            int a[N]={1,2,3,4,5,6,7,8,9,10};
            combie(a,b,N,M);
            system("pause");
        }
       void combie(int a[],int b[],int n,int m )//如何求得m个数这个算法又是如何想到的,
        {                                 //我认为是:每次取最高位的数 从剩下的n-1个数中求m-1个数 这有是同样的问题 所以可以递归来球。 
                                                 //递归总是把问题化为更加小的规模来求取。递归的终止条件是m>1;
           for(int i=n;i>=m;i--)
             {
                b[m-1]=i-1;
                if(m>1) combie(a,b,i-1,m-1);
                else
                 {
                   for(int j=M-1;j>=0;j--)
                   printf("%d  ",a[b[j]]);
                   printf("/n");
                  }  
            
              }
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值