如何通过递归获得2个值?

时间:2015-12-05 11:42:41

标签: python

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

->label('Family Name')

我的逻辑是添加' 0'在开始的前半部分输出并添加' 1'到另一半等等。 但是我在使用递归返回2个值时遇到了麻烦 这就是我试过写的:

n=2
output:
00
01
10
11

5 个答案:

答案 0 :(得分:3)

你可以写一个发电机:

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)])]

答案 1 :(得分:2)

这可能是你想要做的:

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的递归将不起作用,因为函数将只返回一个值,您需要多个值。如果您尝试返回多个值,则必须使用某种迭代(元组,列表,双端队列)。以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

答案 2 :(得分:2)

此函数将生成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']

答案 3 :(得分: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))]

答案 4 :(得分:1)

请尝试以下代码:

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