`
luoweifu
  • 浏览: 63362 次
  • 性别: 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));
	}

}


分享到:
评论

相关推荐

    gray码生成组合算法的java代码

    本项目"gray码生成组合算法的java代码"是基于Java编程语言实现的,旨在结合组合数学原理生成Gray码。在实际编程中,生成Gray码通常涉及到循环移位和异或操作。下面将详细讲解这个程序可能涉及的知识点: 1. **Java...

    GRAY码对照表.rar

    6. **计算方法**:对于n位的GRAY码,可以使用公式`G(n) = (G(n-1) XOR 1)`递归生成,其中G(1) = 0。 7. **编码效率**:虽然GRAY码的编码效率相对较低,因为它不是等概率分布的,但其在减少错误传播方面的优势使其在...

    格雷码生成程序

    格雷码可以用递归法生成,也可以用从对应的二进制码中直接得到。 二、格雷码的生成方法 有两种简单的方法可以生成格雷码: 1. 递归法:可以用递归法生成格雷码。首先,我们可以生成 1 位格雷码,然后用递归法生成...

    Gray码的分治构造算法

    编写完成后,需要进行充分的测试,确保算法对于各种输入(尤其是边界情况,如n=1, 2, 3等)都能正确生成Gray码序列。测试用例应覆盖所有可能的位数,并验证生成的序列符合Gray码的性质。 6 结果分析 通过运行测试...

    格雷码图片生成与保存C++实现代码

    最简单的格雷码生成方法是通过反射格雷码(reflected Gray code)规则,也称为循环移位格雷码。对于n位格雷码,其第i位代码可以通过将前i-1位的反码向左移一位得到。例如,对于3位格雷码,我们从000开始,依次得到...

    毕业设计-源码格雷码问题递归算法设计和实验

    本毕业设计项目主要关注的是使用递归算法来设计和实现格雷码的相关问题。 首先,我们需要理解格雷码的基本概念。在二进制系统中,一个n位的格雷码可以表示2^n个不同的数值,其中n是位数。例如,对于3位的格雷码,它...

    Gray code-参考代码

    为了生成Gray码序列,我们可以采用递归的方式。基本思路是先生成长度为1的Gray码序列,然后通过递归生成更长的序列。具体步骤如下: 1. **基础情况:**当n为1时,Gray码序列为“0”和“1”。 2. **递归生成:** - ...

    gray完整代码.绝对正确!!!.docx

    它的核心思想是利用递归来生成GRAY码序列,通过反转和添加前缀的方法确保了相邻码之间只有一位不同,从而满足了Gray码的定义。从代码结构和实现策略上看,该程序具备了清晰易懂的特点,适合用于教学和学习。同时,...

    C经典算法之格雷码(Gray Code)

    下面给出一个使用C语言实现格雷码生成的示例代码: ```c #include #include #define MAXBIT 20 #define TRUE 1 #define CHANGE_BIT(x) x = ((x) == '0' ? '1' : '0') #define NEXT(x) x = (1 - (x)) int main...

    格雷码(Gray Code)序列

    在Java编程语言中实现格雷码的生成,可以使用递归或循环的方式。例如,一个简单的递归方法可能如下所示: ```java public class GrayCode { public static List&lt;Integer&gt; generateGrayCode(int n) { List...

    Python实现的生成格雷码功能示例

    在生成格雷码的场景下,递归方法的思路是基于这样一个发现:任意两个相邻的格雷码之间的差异仅仅在于一个二进制位的翻转。基于这个观察,可以递归地构造出所有格雷码序列。 文件中给出的具体代码实现如下: ```...

    GLM.rar_格雷码_格雷码生成

    "gray.cpp"可能包含了格雷码生成算法的实现;"putarray.cpp"可能是用来处理和输出数组的辅助函数;而"gray.h"则可能是包含格雷码生成函数声明的头文件。 在实际应用中,格雷码的生成算法不仅用于编码,还常用于数据...

    geleima.rar_格雷码

    总的来说,格雷码是一种特殊编码方式,递归生成格雷码的过程涉及二进制逻辑操作,对于理解和编程实现都是很好的练习。在实际工程中,正确理解和使用格雷码能有效地减少错误,提高系统的可靠性和效率。

    毕业设计MATLAB_生成格雷码并将其转换为整数.zip

    4. `grays.m`:此文件可能包含了生成所有n位格雷码的算法,它可能使用了循环或者递归的方法。 5. `gray2int.m`:正如其名,这个函数应该是将格雷码转换为整数的另一种实现,可能与`gc2dec.m`类似但有不同的实现细节...

    格雷码源代码,用C语言描述

    标题与描述中的“格雷码源代码,用C语言描述”指的是一种在计算机科学领域广泛应用的编码方式——格雷码(Gray Code)的实现代码,该代码是使用C语言编写的。格雷码是一种二进制数字系统,其中两个连续的数值在二...

    分治法求格雷码的C语言代码

    本文介绍了一种利用分治法求解格雷码(Gray Code)的方法,并提供了相应的C语言代码实现。格雷码是一种二进制数字系统,在该系统中,两个连续的数值其二进制表示仅有一位不同。 #### 描述解析 这段描述简要介绍了...

    精彩Gray code

    最初,人们可能使用简单的迭代方法来生成格雷码序列,但在处理大数目的格雷码时,这种方法可能变得低效和繁琐。于是,更高效的算法,如利用递归、动态规划或位操作等策略被提出,它们能够以更少的步骤,更小的空间...

    glm.zip_existzpp_格雷码_格雷码换算

    上述代码使用递归方式生成n位的格雷码。 `MIMO_OFDM_program_list.pdf`可能是一个关于多输入多输出(MIMO)正交频分复用(OFDM)系统的程序列表或指南。在无线通信中,MIMO-OFDM技术结合了MIMO的多径传输和OFDM的...

    Grayp_graycode_源码.zip

    - 一个简单的递归实现方法是,当n为1时返回{0,1},否则将n-1位的格雷码前缀与每种状态结合,再加上一个根据前缀决定的新位(0或1,具体由前缀的最末位决定)。 ```cpp vector&lt;int&gt; grayCode(int n) { if (n == 0)...

Global site tag (gtag.js) - Google Analytics