组合问题的递归实现

算法说明:从n个数中选m个数,可以分解为以下两步

(1)首先从n个数中选取编号最大的数,然后在剩下的n-1个数中选取m-1个数,直到从n-(m-1)个数中选取1个数为止。

(2)从n个数中选取编号次小的一个数,继续执行第(1)步,直到当前可选编号最大的数为m。

 1 #include<stdio.h>
 2 
 3 void com(int a[],int n,int m,int b[],const int M)
 4 {
 5     int i,j;
 6     for(i=n;i>=m;i--)
 7     {
 8         b[m-1]=i-1;
 9         if(m>1)
10         {
11             com(a,i-1,m-1,b,M);
12         }
13         else
14         {
15             for(j=M-1;j>=0;j--)
16             {
17                 printf("%d ",a[b[j]]);
18             }
19             printf("
");
20         }
21     }
22 }
原文地址:https://www.cnblogs.com/shutter/p/4733314.html