暴力递归就是把所有的可能性都做一遍,比如全排列,最朴素的自然智慧。
打印一个字符串的所有子集。比如“abc”,子集就是 a,b,c,ab,bc,abc.
递归实现。
实例注意事项:传递的是引用。
本例new ans后并没有删除。
void process(string str, int index, string path, list<string>& ans)
{
if (index == str.length()) //basecase 到了终止位置,没有字符可以选了
{
ans.push_back(path);
}
else //有字符可选
{
process(str, index + 1, path, ans); //不要当前字符 当前路径path 没加
process(str, index + 1, path + str[index], ans);//要当前字符
}
}
list<string>* printAllSubs(string str)
{
list<string>*ans=new list<string>;
if (str == "")
{
return ans;
}
if (str.length() == 0)
{
ans->push_back("");
return ans;
}
process(str, 0, "", *ans);//0开始做决定
return ans;
}
void main_printAllSubs()
{
cout << "************main_printAllSubs****************" << endl;
string test = "abc";
list<string> *ans = printAllSubs(test);
for (auto it = ans->begin(); it != ans->end(); it++)
{
cout << *it << endl;
}
}