`
luoweifu
  • 浏览: 61117 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

用递归实现生成Gray码的算方法

 
阅读更多
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)

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));
	}

}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics