组合问题的递归方式解决
思路如下
1.从n个样品中取出k个数,首先从这一堆样品中取出编号最大的数,然后从n-1个样品中取出k-1个样品,直到从n-(k-1)中取出1个数为止
2.从n个样品中选取编号次小的样品,继续执行1,直到编号为k的数为止
代码如下
#include <stdio.h>
void combine(int arr[], int n, int k, int subset[])
{
if (k == 0) {
return;
}
int i,j;
for (i = n; i >= k; --i) {
subset[k - 1] = arr[i - 1];
if (k > 1) {
combine(arr, i - 1, k - 1, subset);
} else {
for (j = 0; j < K; ++j) {
printf("%d,", subset[j]);
}
printf("\n");
}
}
}