No.7 递归实现输出所有子集
输入n;
输出{‘a’,‘b’,‘c’,…,‘a’+n-1}的所有子集
是使用递归实现的:
#include<iostream>
#include<fstream>
using namespace std;
void print(int a[], int num) {
int check = 0;
for (int i =0; i < num; i++) {
if (a[i]==1) {
if (check == 0) {
cout << char('a' + i);
check = 1;
continue;
}
cout << ' ' << char('a' + i);
}
}
cout << endl;
}
void subset(int x,int n,int num,int a[] ) {
if (n == 0) { //空集的情况,打印,递归终止
cout << endl;//空集打印
}
else if (n == 1) { //在剩下的数当中取出一个来,一个的情况好写,所以在这里结束递归
for (int j = x; j < num;j++) {
a[j] = 1;
print(a,num); //非空集的打印
a[j] = 0;
}
}
else {
for (int i = x; i < num - n + 1; i++) { //取用多个时,递归,逐渐划分为以上的情况
a[i] = 1;
subset(i + 1, n - 1, num,a);
a[i] = 0;
}
}
return;
}
int main() {
ifstream infile("input.txt");
int n;
infile>> n;
if (n < 1 || n>26) {
cout << "WRONG" << endl;
}
else {
int *a;
a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = 0;
}
for (int i = 0; i <= n; i++) {
subset(0, i, n,a);
}
delete[] a;
}
return 0;
}