一个c++递归生成格雷码的简单算法。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void getGrayCode(vector<string> &v, int cnt) {
if (cnt == 1) {
v.push_back("0");
v.push_back("1");
return;
}
getGrayCode(v, cnt - 1);
vector<string> vecTmp = v;
reverse(vecTmp.begin(), vecTmp.end());
for (size_t i = 0; i < vecTmp.size(); i++) {
v[i] = "0" + v[i];
vecTmp[i] = "1" + vecTmp[i];
v.push_back(vecTmp[i]);
}
}
int main() {
vector<string> grayCode;
int cnt = 0;
while (true) {
cin >> cnt;
if (cnt <= 0) {
cout << "所输入数字不符合要求(>0), 请重试!" << endl;
}
else {
break;
}
}
getGrayCode(grayCode, cnt);
for (size_t i = 0; i < grayCode.size(); i++) {
cout << grayCode[i] << " ";
if(i+1 % 8 == 0){
cout << endl;
}
}
cout << "\n\n";
system("PAUSE");
return 0;
}