sag*_*van 4 python algorithm recursion gray-code
我尝试用Python生成格雷码.此代码正常工作.问题是我正在初始化函数中的基本case(n=1,[0,1]
)main
并将其传递给gray_code
函数来计算其余部分.我想在函数本身内生成所有格雷码,包括基本案例.我怎么做?
def gray_code(g,n):
k=len(g)
if n<=0:
return
else:
for i in range (k-1,-1,-1):
char='1'+g[i]
g.append(char)
for i in range (k-1,-1,-1):
g[i]='0'+g[i]
gray_code(g,n-1)
def main():
n=int(raw_input())
g=['0','1']
gray_code(g,n-1)
if n>=1:
for i in range (len(g)):
print g[i],
main()
Run Code Online (Sandbox Code Playgroud)
这个算法的递归关系是T(n)=T(n-1)+n
什么?
Mat*_*ans 13
生成格雷码比您想象的要容易.秘诀是第N个格雷码位于N ^(N >> 1)的位中
所以:
def main():
n=int(raw_input())
for i in range(0, 1<<n):
gray=i^(i>>1)
print "{0:0{1}b}".format(gray,n),
main()
Run Code Online (Sandbox Code Playgroud)
def gray_code(n):
def gray_code_recurse (g,n):
k=len(g)
if n<=0:
return
else:
for i in range (k-1,-1,-1):
char='1'+g[i]
g.append(char)
for i in range (k-1,-1,-1):
g[i]='0'+g[i]
gray_code_recurse (g,n-1)
g=['0','1']
gray_code_recurse(g,n-1)
return g
def main():
n=int(raw_input())
g = gray_code (n)
if n>=1:
for i in range (len(g)):
print g[i],
main()
Run Code Online (Sandbox Code Playgroud)