Python 如何使用递归获得2个值?

Python 如何使用递归获得2个值?,python,Python,我正在尝试构建一个可以打印所有二进制序列的代码 比如说, n=2 output: 00 01 10 11 我的逻辑是将“0”添加到开始输出的前一半,并将“1”添加到另一半,依此类推。 但是我在用递归返回2个值时遇到了麻烦 这就是我试着写的: def binary(prefix='',n): if n==0: return prefix else: for i in range(2): if i==0:

我正在尝试构建一个可以打印所有二进制序列的代码 比如说,

n=2
output:
00
01
10
11
我的逻辑是将“0”添加到开始输出的前一半,并将“1”添加到另一半,依此类推。 但是我在用递归返回2个值时遇到了麻烦 这就是我试着写的:

def binary(prefix='',n):
    if n==0:
        return prefix    
    else:
        for i in range(2):
            if i==0:
                return ('0'+binary(prefix,n-1))
            if i==1:
                return ('1'+binary(prefix,n-1))

您可以使用
itertools

from itertools import product, repeat

for i in product(*repeat('01', n)):
    print(''.join(i))
然后,您的函数将类似于:

def binary(n):
   return [''.join(comb) for comb in product(*repeat('01', n))]

您可以编写一个生成器:

def binary(n):
    if n==0:
        yield ''
    else:
        for i in range(2):
            for item in binary(n-1):
                yield ('0' if i==0 else '1')+item

list(binary(3))  # ['000', '001', '010', '011', '100', '101', '110', '111']
注意:我删除了前缀,因为您的代码返回了后缀。如果需要包装器函数,请添加该函数

您还可以使用itertools模块:

[''.join(item) for item in itertools.product(*['01' for _ in range(n)])]

这可能就是您想要做的:

def recursive_get_bin_str(s, n):
    if n == 0:
        print s
    else:
        for digit in '01':
            recursive_get_bin_str(s + digit, n - 1)
使用return的递归将不起作用,因为该函数将只返回一个值,并且您需要多个值。如果试图返回多个值,则必须使用某种类型的iterable(tuple、list、deque)。deque的示例:

from collections import deque

def linear_get_bin_str(n):
    bin_strings = deque([''])
    for i in xrange(n):
        while len(bin_strings[0]) == i:
            bin_str = bin_strings.popleft()
            for digit in '01':
                bin_strings.append(bin_str + digit)
    return bin_strings

此函数将为n>0生成字符串,其中您需要的可能是列表而不是前缀

def binary(n,li=["0","1"]):
    if n==0:
        return []
    elif n==1:
        return li
    lis=[j+i for i in li for j in ["0","1"]]
    return binary(n-1,lis)
二进制(2):
['00','10','01','11']


二进制(3):
['000','100','010','110','001','101','011','111']

请尝试以下代码:

def print_binary(prefix,n):
if n==0:
    print (prefix)
else:
    print_binary((prefix+'0'),n-1)
    print_binary((prefix+'1'),n-1)

提示:
returnx,y
将返回
x
y
作为
tuple
您的逻辑有一个巨大的缺陷:
i==1
条件从未达到,因为第一个
i==0
始终运行并将始终返回。嗯……如果输入是
2
,则输出将是
['00',01',11'
。OP似乎也需要
'10'
@roi.shtiv-Huh!您在上一次编辑问题时发布了此答案,对吗。