C++再帰生成グレイコード
9471 ワード
まず、グレイ符号は、隣接する2つの符号の間に1つの値しか異なる符号化方式である(バイナリビット).例えば、3人のグレイコードは:
注意、最初の000は、100とは1つだけ違います.グレイコードは、次のように生成されます.
コード:
000,001,011,010,110,111,101,100
注意、最初の000は、100とは1つだけ違います.グレイコードは、次のように生成されます.
, 0, 1.
, 0
1
: 1
0
0, 1 :
00
01
11
10
。 :
{ 0,1 n==1
f(n) = { f(n-1) n >=2
{ , 0, 1
コード:
template<typename T,unsigned int N> void recursive::grayCodeGeneration(T (*list)[N],std::size_t size)const{
if(size==1){//
list[0][size-1]=0;
list[1][size-1]=1;
}
else{
grayCodeGeneration(list,size-1);
//
for(int i= std::pow(2,size-1),j=std::pow(2,size)-1;i < std::pow(2,size);++i)
for(int k = 0;k<N;k++)
list[i][k] = list[j-i][k];// ,
// pow(2,size)-1;
// 0, 1
for(int i = 0;i < std::pow(2,size);i++){
if(i <= (std::pow(2,size)/2-1))
list[i][size-1]=0;
else
list[i][size-1]=1;
}
}
}