1. 在一組數的編碼中,若任意兩個相鄰的代碼只有一位二進制數不同,則稱這種編碼爲格雷碼( Gray Code )。請編寫一個函數,使用遞歸方法生成 N 位的格雷碼,並且保證這個函數的健壯性。
這是一道leetcode的原題https://leetcode.com/problems/gray-code/,關於二進制數i對應的格雷碼j有如下關係j=i^(i>>1);
比較簡單,非遞歸代碼如下:
vector<int> grayCode(int n) {
vector<int> v;
int num=1;
for(int x=0;x<n;x++)
num*=2;
for(int i=0;i<num;i++)
v.push_back(i^(i>>1));
return v;
}
遞歸代碼: vector<int> grayCode(int n) {
vector<int> v;
if(n==0)
v.push_back(0);
else if(n==1)
{
v.push_back(0);
v.push_back(1);
}
else
{
v=grayCode(n-1);
int x=v.size();
for(int i=x;i<2*x;++i)
v.push_back(i^(i>>1));
}
return v;
}