See explain of Gray Code: https://en.wikipedia.org/wiki/Gray_code
1-bit Grey Code: 0, 1
2-bits Grey Code: 00, 01, 11, 10
3-bits Grey Code: 000, 001, 011, 010, 110, 111, 101, 100
4-bits Grey Code: 0000, 0001, 0011, 0010, 0110, 0111, 0101, 0100, 1100, 1101, 1111, 1110, 1010, 1011, 1001, 1000
.....
From the above, we can get a rule of generating n+1 bits Grey Code once we know n bits Grey Code.
n+1 bits Gray Code = 0 + n bits Gray Code, Reverse_Order(n bits Gray Code) + 1; // recursion
vector<int> grayCode(int n) {
if(n == 0) return {0};
if(n == 1) return {0, 1};
vector<int> bits = grayCode(n-1); // recursion happens here.
vector<int> result;
result = bits;
reverse(bits.begin(), bits.end());
int mask = 1 << (n-1);
for(int i = 0; i < bits.size(); ++i) {
result.push_back(mask | bits[i]);
}
return result;
}