能否用递归求任一集合的所有子集解决思路

能否用递归求任一集合的所有子集
如题:即用来输出n个元素的集合所有的子集,如{a,b,c}的子集就有{},{a},{b},{c},{a,b},{a,c},{b,c},{a,b,c}。集合元素列表用数组list[0:n-1]表示,输出所有子集!!

------解决方案--------------------
不需要递归也可以……
给个简单示范,任意长度请自行扩展……

C/C++ code
 
#include <stdio.h>
#define LEN 3
const char set[LEN]={'a','b','c'};
void show(const char data[],int size,int sec)
{
  int i;
  putchar('{');
  for(i=0;i <LEN;++i)
    if((sec>>i) & 0x01)
      printf(" %c ",data[i]);
    puts("}");
}

int main(int argc, char* argv[])
{
  int sec;
  for(sec=0;sec <(1 < <LEN);++sec)
    show(set, LEN, sec);
  return 0;
}

------解决方案--------------------
初学,请指教

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
using namespace std;
//定义类,求子集-- string
class outset
{public:
//构造
outset(const string &s): str(s) { s_to_vec(str); }
//输出结果
void print();
private:
//谓词 《
friend bool issort(const string &s1, const string &s2);
//处理字符串,存入向量 svec
void s_to_vec(string ts);
string str;
vector< string > svec;
};
bool issort(const string &s1, const string &s2)
{
return s1.size() < s2.size();
}
void outset::s_to_vec(string s)
{
string ns = s;
if (!ns.empty())
for (string::iterator iter = ns.begin(); iter != ns.end(); ++iter)
{
string temp1(ns.begin(), iter), temp2(iter+1, ns.end());
string temp = temp1 + temp2;
s_to_vec(temp);
svec.push_back(temp);
}
}
void outset::print()
{
//排序,处理重复
sort(svec.begin(), svec.end());
vector<string>::iterator end_unique = unique(svec.begin(), svec.end());
svec.erase(end_unique, svec.end());
stable_sort(svec.begin(), svec.end(), issort);
//输出结果
for (vector<string>::iterator iter = svec.begin(); iter != svec.end(); ++iter)
cout << *iter << " ";
cout << endl;
}
int main()
{
outset os("1234");
os.print();
return 0;
}