格雷码Graycode

格雷码是什么见百度百科。

这是一个简单的递归问题:
1.生成n+1位的格雷码:第一位不反转,递归生成n位的格雷码;然后第一位反转,再递归生成n位的格雷码。
2.要保证的就是第一位不反转递归生成的最后一个字符串和第一位反转的递归生成的一第个字符串有相同的后缀。

代码:

进一步的问题:
对一个1~n的序列,如果每次都只能兑换相邻的两位,那么可以生成所有的n!个排列组合结果,要求:按顺序打印这些结果。

递归规则:
如果有了n-1的序列,对序列中第一个序列做如下操作:把n这个数插入到末尾、倒数第二位、...、第一位;对第二个序列从第一位开始插入,然后第二位、...、末尾;第三个序列同第一个,这样下去。

推荐阅读更多精彩内容