Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何输出0';s和1';给定长度的s是递归的吗?_Python_Python 3.x_Recursion_Permutation - Fatal编程技术网

Python 如何输出0';s和1';给定长度的s是递归的吗?

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递归地完成此操作?在不泄露代码的情况下,我将尝试为您提供生成代码所需的提示

我正在尝试用Python递归打印0和1的排列

我知道itertools中有一个置换函数,但我想知道如何递归地实现它,例如

function name is print_01(k) 
    # ...
    print(permutation)
    # ...
…其中k是要打印的每个排列的长度,因此如果将其称为
print\u 01(2)
,则输出如下:

00
01
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
>>>