在一组数的编码中,若两个相邻的代码中只有一个二进制数不同,则称这种编码为格雷码。

      下面尝试使用递归的方法来生成格雷码

       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,并压入