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

2024-10-02 04:29:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一些递归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”。我不明白为什么它不起作用。任何提示都将不胜感激


Tags: 函数代码nonelenreturnifdef二进制
2条回答

使用递归生成器可以使代码更加紧凑。您只需要从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

您的代码不需要更多的return,它需要返回正确的内容printAllrec在这里不使用返回值,它只是修改提供给顶级printAllrec调用的list,该调用被委托给子调用。但是顶级函数printAll需要返回list,而不是从内部递归函数返回的垃圾。只要改变一下:

def printAll(n):
    ...

    return printAllrec(stringSoFar,n,result)

致:

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

Try it online!

它的工作原理与预期一致

相关问题 更多 >

    热门问题