void grayCodes(char* number, int pos, int n, int reverse) { if(pos == n) { printf("%s\n", number); return; } if (!reverse) { number[pos] = '0'; grayCodes(number, pos+1, n, reverse); number[pos] = '1'; grayCodes(number, pos+1, n, !reverse); } else{ //roles of 0,1 are reversed, so anti image of above! number[pos] = '1'; grayCodes(number, pos+1, n, !reverse); number[pos] = '0'; grayCodes(number, pos+1, n, reverse); } }
vector<int> grayCode(int n) { int size = 1<<n; vector<int> grayCodes(size); for (int i=0; i<size; i++) { int code = i ^ i>>1; // match calculation of gray code grayCodes[i] = code; } return grayCodes; }