如何获取长度为 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
它按预期工作。
使用递归生成器可以使代码更加紧凑。您只需要从 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
我正在尝试编写一些递归 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
它按预期工作。
使用递归生成器可以使代码更加紧凑。您只需要从 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