生成N位格雷码的递归和递推写法

来源:互联网 发布:微星 windows 10 whql 编辑:程序博客网 时间:2024/05/21 14:52
#include<iostream>#include<vector>#include<string>using namespace std;//递推写法void Gray(int n){    if(n<=0)        return;    vector<string> result;    int len=pow(2,n);    result.reserve(len);    result.push_back("0");    result.push_back("1");    len=2;    for(int i=1;i<n;i++)    {        int temp=len;        for(int j=len;j>0;)          {              result.push_back(result[--j]);              temp++;        }        for(int j=0;j<len;j++)            result[j]="0"+result[j];        for(int j=len;j<temp;j++)            result[j]="1"+result[j];        len=temp;    }    for(int i=0;i<len;i++)        cout<<result[i]<<endl;}//递归写法void GrayRecr(int n,vector<string> &result){    if(n<=0)        return;    if(n==1)        {            result.push_back("0");            result.push_back("1");            return;    }    else    {        GrayRecr(n-1,result);        int len=result.size();        for(int i=len;i>0;)        {            result.push_back(result[--i]);        }        int temp=len;        for(int i=0;i<len;i++)            result[i]="0"+result[i];        len=result.size();        for(int i=temp;i<len;i++)            result[i]="1"+result[i];    }}int main(){//Gray(3);    vector<string> result;    GrayRecr(3,result);    int len=result.size();    for(int i=0;i<len;i++)        cout<<result[i]<<endl; return 0;}
0 0
原创粉丝点击