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);
	}
}
Beispiel #2
0
    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;
    }