用递归实现生成Gray码的算方法
程序员文章站
2022-07-12 12:58:40
...
Gray码是一种数字编码方式,是一个长度为
如:
当n= 1时
0
1
当n= 2时
00
01
11
10
当n= 3时
000
001
011
010
110
111
101
100
从以上可以看出,gray的规律
m = pow(2, n);
gray(n) = 0gray(n-1) (k < m/2)
如:
当n= 1时
0
1
当n= 2时
00
01
11
10
当n= 3时
000
001
011
010
110
111
101
100
从以上可以看出,gray的规律
m = pow(2, n);
gray(n) = 0gray(n-1) (k < m/2)
1rgray(n-1) (k >= m/2, rgray()是gray序列的逆序)
java代码实现:
public class Gray {
public static char[][] gray(int n) {
int m = (int)Math.pow(2, n);
char g[][] = new char[m][n];
char g1[][];
if(n <1) {
System.err.println("the number of n should larger than zero!");
return null;
} else if(1 == n){
g[0][0] = '0';
g[1][0] = '1';
} else if(n > 1){
g1 = gray(n-1);
for(int i=0; i<m; i++) {
if(i < m/2) {
g[i][0] = '0';
} else {
g[i][0] = '1';
}
for(int j=1; j<n; j++) {
if(i < m/2) {
g[i][j] = g1[i][j-1];
} else {
g[i][j] = g1[m-1-i][j-1]; //m/2-1-(i-m/2)=m-1-i
}
}
}
}
return g;
}
public static void printGray(char[][] g) {
int m = g.length;
int n = g[0].length;
if(n <1) {
System.err.println("the number of n should larger than zero!");
return;
}
for(int i=0; i<m; i++){
for(int j=0; j<n; j++) {
System.out.print(g[i][j]);
}
System.out.println();
}
}
/**
* @param args
*/
public static void main(String[] args) {
printGray(gray(3));
}
}
上一篇: Spring基础之IoC