如何获取长度为 n 的所有二进制数的列表?

How to get a list of all binary numbers of length n?

我正在尝试编写一些递归 python 代码来打印每个长度为 n 的二进制数。函数的输入只能是 n。到目前为止,这是我的代码:

def printAll(n):
    result=[]
    stringSoFar=''
    def printAllrec(stringSoFar,n,result):
        if n ==0:
            result.append(stringSoFar)
            if len(result) == (2):
                return result
        else:
            printAllrec((stringSoFar+"0"),n-1,result)
            printAllrec((stringSoFar+"1"),n-1,result)

    return printAllrec(stringSoFar,n,result)
print(printAll(2))

但是,此代码不断返回 'None'。我不明白为什么它不起作用。任何提示将不胜感激。

您的代码不需要更多 return,它需要 return 正确的东西。 printAllrec 在这里不 使用 return 值,它只是修改提供给顶层 printAllrec 调用的 list,即委托给子调用。但是顶级函数 printAll 需要 return 即 list,而不是来自内部递归函数的垃圾 return。只需更改:

def printAll(n):
    ...

    return printAllrec(stringSoFar,n,result)

至:

def printAll(n):
    ...
    printAllrec(stringSoFar,n,result)
    return result  # returns the actual list

Try it online!

它按预期工作。

使用递归生成器可以使代码更加紧凑。您只需要从 n-1 中获取每个结果并附加一个“0”和一个“1”。

def allBits(n):
    if n: yield from ( bits+bit for bits in allBits(n-1) for bit in ("0","1") )
    else: yield ""

for bits in allBits(3):print(bits)

000
001
010
011
100
101
110
111