a. 首先从n个数中选取编号最大的数,然后在剩下的n-1个数里面选取m-1个数,直到从n-(m-1)个数中选取1个数为止。
b. 从n个数中选取编号次小的一个数,继续执行1步,直到当前可选编号最大的数为m。
void zuheRecursive ( int a[], int n, int m, int b[], const int M )
{
for(int i=n; i>=m; i--) // 注意这里的循环范围
{
b[m-1] = i - 1;
if (m > 1)
zuheRecursive(a,i-1,m-1,b,M);
else // m == 1, 输出一个组合
{
for(int j=M-1; j>=0; j--)
cout << a[b[j]] << " ";
cout << endl;
}
}
}
递归封装
class ZuheRecursive
{
public:
typedef std::vector<std::vector<int> > TZuheResult;
ZuheRecursive(int srcLen, int m)
{
int * tmp = new int[m]();
zuheRecursive(srcLen, m, tmp, m);
delete [] tmp;
}
static void example()