我试图在Python中以递归方式打印0和1的排列。
我知道itertools中有一个置换函数,但想知道如何递归地完成它,例如
function name is print_01(k)
# ...
print(permutation)
# ...
...其中 k 是要打印的每个排列的长度,因此,如果将其称为print_01(2)
,则输出将如下所示:
00
01
10
11
输出始终为 k 。
如何使用print
来递归地完成此任务?
答案 0 :(得分:2)
在不遗漏代码的情况下,我将尝试为您提出所需的提示。
这个想法是要进行递归调用,以便向最初为空的累积字符串再增加一个数字。
递归的所谓“基本情况”是累积的字符串具有所需长度的地方。这是您将其输出(或将其存储在某处)的地方
您需要循环才能访问两个可能的数字。
让我知道这是否足以满足您的需求。
扰流板警报 (仅在尝试后才看下面):
答案 1 :(得分:2)
这是一个主意: 与其递归地执行此操作,不如使用数字的二进制展开:
def print_01(k):
end = 1<<k #this is the integer with binary developpement 1 followed by k zeros
for j in range(end): # iterate until end means getting all k - 0-1 combinations
comb = bin(j)[2:].zfill(k)
print [int(x) for x in comb]
答案 2 :(得分:0)
您真的需要置换...吗? 如果不是,请尝试以下
def print_01(length):
for i in range(1 << length):
print(format(i, '0{}b'.format(length)))
def main():
'''The Main'''
print_01(2)
print_01(3)
if __name__ == '__main__':
main()
答案 3 :(得分:0)
这是一个简单的递归版本:
#!/usr/bin/python -E
#string of binary 1s and 0s, all possible combinations for a given length
def swap(string, loc, val):
newstring = string[:loc]+val+string[loc+1:]
return newstring
def printperms(string,n):
length = len(string)
if n > 0:
string = swap(string, (length - n), "0")
printperms(string, (n -1))
string = swap(string, (length - n), "1")
printperms(string, (n -1))
else:
print(string)
mystring = "000"
length = len(mystring)
printperms(mystring, length)
mystring = mystring+" "
print("############################################")
printperms(mystring,length+1)
答案 4 :(得分:0)
让我们保持简单:
def print_01(bits, n=0):
if n.bit_length() <= bits:
print('{:0{}b}'.format(n, bits))
print_01(bits, n + 1)
int
类型具有方法bit_length()
,该方法告诉您表示该数字所需的最小二进制字符数-我们将其用于控制。嵌套格式允许我们将输出宽度作为变量传递。
用法
>>> print_01(3)
000
001
010
011
100
101
110
111
>>>