生成格雷码.

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)

  • 它打印出`gray`的二进制表示,左边用零填充,直到它的数字为'n` (2认同)

Jac*_*oge 5

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)