利用递归算法生成格雷码

利用递归算法生成格雷码

#include <iostream>

#include <string>

#include <stack>

#include <stdlib.h>

 

std::stack<std::string> result;

 

static int count;

 

void generator() {

count--;

if (count > 0) {

generator();

std::stack<std::string> newResult;

int c = 0;

while(!result.empty()) {

std::string newA, newB;

newA = result.top();

result.pop();

if (!c) {

newB = newA + "0";

newResult.push(newB);

newB = newA + "1";

newResult.push(newB);

c = 1;

} else {

newB = newA + "1";

newResult.push(newB);

newB = newA + "0";

newResult.push(newB);

c = 0;

}

}

if (count % 2 == 0) {

while(!newResult.empty()) {

result.push(newResult.top());

newResult.pop();

}

} else

result = newResult;

} else {

result.push("1");

result.push("0");

}

}

 

int main() {

std::cin >> count;

generator();

while(!result.empty()) {

std::cout << result.top() << std::endl;

result.pop();

}

return 0;

}

 

 

转载于:https://www.cnblogs.com/Anei/p/7805609.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值