格雷码C++递归实现

昨天参加腾讯的笔试,结果答的一塌糊涂,大题第一题是关于格雷码的递归实现的,当时没写出来,今天查了下资料试着用C++实现一下。

#include <iostream>
#include <cmath>
#include <string>
using namespace std;
unsigned int *uIntGaryCode(int N);//二进制格雷码
string *sGaryCode(int N);//字符串型格雷码

int main()
{
    int N;
    N=5;
    string *sCode=sGaryCode(N);
    for(int i=0;i<pow(2,N);i++)
    cout<<sCode[i]<<endl;
    system("pause");
    return 0;
}

unsigned int *uIntGaryCode(int N)//二进制型格雷码的递归实现
{
    unsigned int *code=new unsigned int[(int)pow(2,N)];
    if(1==N)
    {
        code[0]=0;
        code[1]=1;
    }
    else
    {
        int length=(int)pow(2,N-1);
        unsigned int*uiCode=uIntGaryCode(N-1);
        for(int i=0;i<length;i++)
        {
            code[i]=uiCode[i] ;
            code[length+i]= uiCode[length-i-1]+pow(2,N-1);
        }
        delete []uiCode;
    }
    return code;
}


string *sGaryCode(int N)//字符串型格雷码的递归实现
{
    string *code=new string[(int)pow(2,N)];
    if(1==N)
    {
        code[0]='0';
        code[1]='1';
    }
    else
    {
        int length=(int)pow(2,N-1);
        string *sCode=sGaryCode(N-1);
        for(int i=0;i<length;i++)
        {    
            code[i]="0"+sCode[i];
            code[length+i]='1'+sCode[length-i-1];
        }
        delete [] sCode;
    }
    return code;
}
原文地址:https://www.cnblogs.com/fastcam/p/4788287.html