数据结构、算法与应用C++语言描述
第一章:26题
编写一个C++递归函数,实现输出格雷码的位置变化序列。
代码实现:
#include <algorithm>
#include <iterator>
#include<vector>
template<typename T>
void Func(int n, std::vector<T>& idxs)
{
// 基础部分
if (n == 1) {
idxs.push_back(1);
}
else {
// 递归部分
Func(n - 1, idxs);
idxs.push_back(n);
Func(n - 1, idxs);
}
}
int main(int argc, char** argv)
{
std::vector<int> idxs;
Func(4, idxs);
std::copy(idxs.begin(), idxs.end(), std::ostream_iterator<int>(std::cout, " "));
}
(补充)基于位置变化序列生成格雷码
std::vector<bool> btyes(size, 0);
std::copy(btyes.cbegin(), btyes.cend(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
for (const auto i : idxs) {
btyes[i - 1] = !btyes[i - 1];
std::copy(btyes.cbegin(), btyes.cend(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
}