Python 如何输出0';s和1';给定长度的s是递归的吗?
我正在尝试用Python递归打印0和1的排列 我知道itertools中有一个置换函数,但我想知道如何递归地实现它,例如Python 如何输出0';s和1';给定长度的s是递归的吗?,python,python-3.x,recursion,permutation,Python,Python 3.x,Recursion,Permutation,我正在尝试用Python递归打印0和1的排列 我知道itertools中有一个置换函数,但我想知道如何递归地实现它,例如 function name is print_01(k) # ... print(permutation) # ... …其中k是要打印的每个排列的长度,因此如果将其称为print\u 01(2),则输出如下: 00 01 10 十一, 输出的长度始终为k 如何使用print递归地完成此操作?在不泄露代码的情况下,我将尝试为您提供生成代码所需的提示
function name is print_01(k)
# ...
print(permutation)
# ...
…其中k是要打印的每个排列的长度,因此如果将其称为print\u 01(2)
,则输出如下:
0001
10
十一, 输出的长度始终为k
如何使用
print
递归地完成此操作?在不泄露代码的情况下,我将尝试为您提供生成代码所需的提示
其思想是进行递归调用,向一个最初为空的累积字符串再添加一个数字
递归的所谓“基本情况”是累积字符串具有所需长度的情况。这是您将其输出(或存储在某处)的位置
您需要一个循环来访问这两个可能的数字
让我知道这是否足够让你开始
扰流板警报(仅在尝试后查看下方):
这里有一个想法:
使用二进制数字开发,而不是递归地执行此操作:
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]
def print_01(k):
end=1您真的需要排列?
如果没有,请在下面尝试
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()
def print_01(长度):
对于范围内的i(1,这里有一个简单的递归版本:
#!/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)
让我们保持简单:
def print_01(bits, n=0):
if n.bit_length() <= bits:
print('{:0{}b}'.format(n, bits))
print_01(bits, n + 1)
由于(最大)递归深度,我不确定使用递归是否是一个好主意…感谢您发布代码,是否有一个链接可以让我了解for循环的工作原理?循环只是循环遍历字符串“01”,依次获取每个字符。因此digit
将首先是“0”,然后是第二个(最后一个)它将是“1”
>>> print_01(3)
000
001
010
011
100
101
110
111
>>>