数据结构(C语言)—— -1递归:gray码

趁着复习把课上的作业和代码上传上来嘿嘿嘿,这个系列的代码都是自己写的或者老师教学用的可能内存管理上有点小瑕疵,但是算法理解还是不错的!本系列所有代码在dev-cpp上可以跑通~

gray码:

先来看一下gray码的定义把,

数据结构(C语言)—— -1递归:gray码_第1张图片

数据结构(C语言)—— -1递归:gray码_第2张图片

格雷码_百度百科 (baidu.com)

然后递归实现:

输入n,输出n位gray码

#include 
#include 
void graycode(int n, int a[]){
 	if(n==1){
 		a[0]=0;
 		a[1]=1;
	 }
	 else{
	 	gray(n-1,a[]);
	 	int L=1<<(n-1);
	 	for(int i=0;i=1; i--)
		{	
			printf("%d",remainder[i]);
		}
		printf("\n"); 				
	}
}



int main(int argc, char *argv[]) {
	int k ;
	scanf("%d", &k); getchar();	
	
	int m = 1 <

*1<

display是将十进制转换成二进制。

主要是graycode,我们来解释一下:

void graycode(int n, int a[]){
 	if(n==1){
 		a[0]=0;
 		a[1]=1;
	 }
	 else{
	 	gray(n-1,a[]);
	 	int L=1<<(n-1);
	 	for(int i=0;i

显然递归出口时n==1的时候,这个时候有两个,第一个是0第二个是1。

n位gray码有2^n项,于是,有了下面的递归

对于k位gary码,先解决k-1为gray码,然后新增的元素为从2^(k-1)-2~2^k-1(规律为:

a[2^k-i-1]=a[i]+2^(k-1)(i=0:2^(k-1))。

你可能感兴趣的:(数据结构,算法,c语言)