试编写一个递归函数,用来输出n个元素的所有子集。例如,三个元素{a,b,c}的所有子集是:{} (空集) , {a} , {b} , {c} , {a,b} , {a,c} , {b,c} , {a,b,c}
#include<iostream>
#include<string>
using namespace std;
template <class T>
void procedure(T *list,int *flag,int k,int m){
if(k>m){
cout<<"{";
for(int i=0;i<=m;i++){
if(flag[i]==1){
cout<<list[i];
}
}
cout<<"}"<<endl;
return;
}
flag[k]=1;
procedure(list,flag,k+1,m);
flag[k]=0;
procedure(list,flag,k+1,m);
}
int main(){
int *flag=new int(4);
string list[4]={"a","b","c","d"};
procedure(list,flag,0,3);
return 0;
}
用到了一个模板函数,要理解递归的概念还是先去理解下排列的算法实现,更复杂也更经典。