C程序设计的抽象思维-递归过程-格雷码
来源:互联网 发布:韩春雨 专业评价 知乎 编辑:程序博客网 时间:2024/04/29 20:11
【问题】
每一对相邻整数的二进制表示只有一位发生变化,这种编码称为Gray码。
如下所示3位的Gray码:
00000011011201031104111510161007要产生N位的Gray码,所需的递归思想概括如下:1. 写出N-1位的Gray码。
2. 以相反的顺序在该Gray码下重写一遍。
3. 在第一步得到的Gray码前加0,在第二步得到的Gray码前加1。
继续以3位Gray码为例,推导过程如下所示:
【代码】
#include <stdio.h>#include <stdlib.h>#define MAX 1024#define M 10int a[MAX][M]; /*****************************************//* 前半部分格雷码存入数组 *//*****************************************/void ForeCode(int forenum, int n){int i, j;for(i = 0; i <= forenum; i++)/*双重循环使n-1位格雷码后移一位*/for(j = n - 2; j >= 0; j--)a[i][j + 1] = a[i][j];for(i = 0; i <= forenum; i++)/*前半部分第0位为0*/a[i][0] = 0;}/*****************************************//* 后半部分格雷码存入数组 *//*****************************************/void BackCode(int backbegin, int backend, int n){int i, j;for(i = 0; i < backbegin; i++)/*后半部分与前半部分对称*/for(j = 1; j < n; j++)a[backend - i - 1][j] = a[i][j];for(i = backbegin; i < backend; i++)/*后半部分第0位为1*/a[i][0] = 1;}/*****************************************//* 生成格雷码 *//*****************************************/void GrayCode(int nBits){int i, k, m = 1;if(nBits == 1){a[0][0] = 0;a[1][0] = 1;}elseGrayCode(nBits - 1); /*递归调用*/for(i = 0; i < nBits; i++)m = 2 * m; /*n位的Gray码总共有2**n次方个*/k = m / 2;ForeCode(k - 1, nBits);BackCode(k, m, nBits);}/****************************************//* 打印格雷码 *//****************************************/void PrintGrayCode(int nBits){int i, j, m = 1;for(i = 0; i < nBits; i++)m = 2 * m;for(i = 0; i < m; i++){for(j = 0; j < nBits; j++)printf("%d", a[i][j]);printf("\n");}}int main(){int nBit;nBit = 3;GrayCode(nBit);PrintGrayCode(nBit);return 0;}
1 0
- C程序设计的抽象思维-递归过程-格雷码
- C程序设计的抽象思维-递归过程-砝码称重
- C程序设计的抽象思维-递归过程-数集分离问题
- C程序设计的抽象思维-递归入门
- C程序设计的抽象思维-C的数据类型
- C程序设计的抽象思维-回溯算法-迷宫问题
- C程序设计的抽象思维-算法分析-大多数元素
- 抽象思维和逻辑思维是程序设计的基础[转]
- 程序设计抽象思维——随机数
- 谈程序员的抽象思维
- 测试人员的抽象思维
- 抽象思维
- 抽象思维:学习和思考的好方法
- 抽象思维实现各种不同的接口调用
- 递归程序设计的公式化方法
- 分治的实现::递归程序设计
- 分治的实现::递归程序设计
- 程序设计C语言-递归(汉诺塔)
- js 事件机制兼容性
- centos开放防火墙接口
- 控制台是GBK编码
- 网页yy语音(歪歪语音) 网页版
- Android内存管理机制详解
- C程序设计的抽象思维-递归过程-格雷码
- 驾考宝典2014电脑版 v5.1.3 pc版
- iframe 高度自适应 手机端适用
- 乐助手电脑版 v3.0.4.33284 官方版
- MySQL去重计数--经过测试的语句
- nginx超级详细配置
- 基于Android源码编译系统应用
- js生成随机数
- 太平洋产险 开启微信服务时代