Write a function that prints all the set of all integers from $1$ to $n$.
For example, the following are the subsets of the set $\{1, 2, 3, 4\}$:
{}
{1}
{2}
{1,2}
{3}
{1,3}
{2,3}
{1,2,3}
{4}
{1,4}
{2,4}
{1,2,4}
{3,4}
{1,3,4}
{2,3,4}
{1,2,3,4}
Notice that the order of these subsets correspond to the bits of the integers from $0$ to $15$:
0000 {}
0001 {1}
0010 {2}
0011 {1,2}
0100 {3}
0101 {1,3}
0110 {2,3}
0111 {1,2,3}
1000 {4}
1001 {1,4}
1010 {2,4}
1011 {1,2,4}
1100 {3,4}
1101 {1,3,4}
1110 {2,3,4}
1111 {1,2,3,4}
Thus, you could simply iterate through the numbers from $0$ to $2^n - 1$ and only print those numbers corresponding to bits that are set to $1$.
One issue with this approach is that there is no relationship between the subsequent sets. For example, the set following $\{1, 2, 3\}$ is the singleton $\{4\}$. One way to avoid this is to use Gray codes (see a previous project) in which case, there is only the addition or removal of an integer in the set with each subsequent entry:
0 0000 {}
1 0001 {1}
3 0011 {1,2}
2 0010 {2}
6 0110 {2,3}
7 0111 {1,2,3}
5 0101 {1,3}
4 0100 {3}
12 1100 {3,4}
13 1101 {1,3,4}
15 1111 {1,2,3,4}
14 1110 {2,3,4}
10 1010 {2,4}
11 1011 {1,2,4}
9 1001 {1,4}
8 1000 {4}
Your function should have the declaration
void print_subsets( unsigned int n, bool use_gray_codes = false );