看见一招聘题目中要求使用递归法求解格雷码,发现网上有人称作递归法其实很勉强。以下贴出自己认为的递归法求解格雷码方法。首先,我主要介绍以下格雷码递归原理:对于N(bit)的长度的格雷码,其前N/2个格雷码即是N-1(bit)位格雷码的正序,后N/2位格雷码是最高位为1,后(N-1)位是(N-1)位格雷码的逆序。
所以递归算法步骤如下: 1.判断是否为递归出口,即入口参数是否小于2,是的话直接返回;
2.找到最高位1,可看作后(最高位)/2位的一个格雷码,可递归调用(最高位-1)位逆序格雷码,再把最高位置1。
代码如下:
#include<iostream>
#include<bitset>
using namespace std;
const int bitDepth = 4; //可更改,值小于等于32
typedef bitset<bitDepth> grayType;
unsigned int getGrayValue(unsigned int num)
{
if (num <2)
return num;
else
{
unsigned int i = 1 << (bitDepth - 1);