如何获得长度为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"。我不明白为什么它不起作用。如有任何提示,我们将不胜感激。

您的代码不需要更多的returns,它需要返回正确的东西。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

在线试用!

并且它如预期的那样工作。

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

最新更新