在一组数的编码中,若两个相邻的代码中只有一个二进制数不同,则称这种编码为格雷码。
下面尝试使用递归的方法来生成格雷码
vector<int> GrayCode(int n){//n表示格雷码的位数 if(n==0) return vector<int>(1)//返回只有一个0的容器 vector<int> res=GrayCode(n-1);//采用递归方法 for(int i=res.size()-1 ; i >=0 ;i-- )//采用从后往前的方式 res.push_back(res[i]+(i<<(n-1))); return res; }
举例说明:n==0时 res={0}
n==1时 res={0,1}//相当于在n==0的情况的基础上,从后往前在第0位加1,并压入
n==2时 res={0,1,11,10} //相当于在n==1情况的基础上,从后往前在第1位加1,并压入
n==3时 res={0,1,11,10,110,111,101,100}//相当于在n==2的基础上,从后往前在第二位加1,并压入
n==4时 res={0,1,11,10,110,111,101,100,1100,1101,1111,1110,1010,1011,1001,1000}//相当于在n==3的基础上,从后往前在第3位上加1,并压入
时间: 2024-10-06 23:53:50