此求abc所有子集的C++程序为何会连续输出两次?求解?该如何处理

此求abc所有子集的C++程序为何会连续输出两次?求解?
#include<iostream>
#include<string>
using namespace std;

string c[4] = {"","a","b","c"};
int n = 3;

void getSet(int i,string s)
{
if(i > n)
cout<<s<<endl;
else
{
getSet(i+1,s+c[i]);
getSet(i+1,s);
}
}
void main()
{
getSet(0,"");
}

------解决方案--------------------
你的c[0]是"",那么getSet(0,"")运行后会调用
C/C++ code

getSet(i+1,s+c[i]);
getSet(i+1,s);

------解决方案--------------------
递归程序可以设置一个比较小的初值,然后单步调试一遍就可以掌握其规律了