格雷码的递归生成算法

格雷码的递归生成算法

算法的核心在于, n位的格雷码是基于n-1位的格雷码生成的。


假设我们手上已经有了n-1位的格雷码:
a1, a2, a3 .... an
n 为2的若干次方

随便抽一个元素,譬如说a2,这个a2尾部加一个0或者1,可以得到2个n位的格雷码:
a2 0 和 a2 1
关键在于,我们要搞清楚,它们前面和后面的邻居是谁。
对于a2 0来说,很明显,它后面的邻居可以是a2 1,那a2 0前面的那个数是多少?
直觉上,a2 0前面的数应该是a1 0或者 a1 1
经过检验,我们发现,a2 0前面的数应该是 a1 0

用同样的思路去类推每个a[i],最后我们可以得到n位格雷码为:
a1 0
a1 1
a2 1
a2 0
a3 0
a3 1
a4 1
a4 0
...
an 1
an 0

注意观察最低位的规律: 0,1, 1,0, 0,1, 1,0, 0,1, 1,0....


ok,整个算法的思路出来了,剩下的就是细心的coding了。

你可能感兴趣的:(格雷码的递归生成算法)