n位格雷码的编码方式是在n-1为格雷码中逐个取出,进行如下操作后放入新的可增长容器内(初始长度为0),记当前容器长度为n:
1.前面加0字符放在第[(n+1)/2]位置上,此时容器长度加1;
2.前面加1字符放在第[(n+1)/2]位置上,此时容器长度加1
基于这种算法思想,可以考虑递归的方法,下面是设计递归的小tricks:
''' 递归函数里面要有结束条件 如果一个状态可以由上一个状态唯一确定则可以用回溯递归 确定递归函数参数一般要包含一个idx的ID累加器 递归函数的参数中不变的可以写成全局变量 '''
def gray_code(n):#递归版 length=int(math.pow(2,n)) list=[ '' for i in range(length)] if n==1: list[0]='0' list[1]='1' return list list_before=gray_code(n-1) for i in range(len(list_before)): list[i]='0'+list_before[i] list[length-1-i]='1'+list_before[i] return list def graycode(n):#非递归版 list=['0','1'] for i in range(2,n+1): new_list=[] for each in list: index=(len(new_list)+1)//2 new_list.insert(index,'0'+each) index=(len(new_list)+1)//2 new_list.insert(index,'1'+each) list=new_list return list