使用递归从字符列表打印n个长度的组合

时间:2018-11-30 16:35:13

标签: python python-3.x list recursion combinations

我必须使用递归来解决此练习。

  

在Python中实现一个函数,该函数接收字符列表和整数n作为参数。该功能必须打印长度为n的所有可能组合,其中每个字符可以显示多次。

对我来说,这真是令人难以置信,所有这些思考通常都是递归的。

例如,对于这个问题,我认为已经一个半小时,不知道我在想什么。我不知道如何开始递归思考,我从哪里开始?

我写了些废话:

def print_sequences(char_list, n):
if len(char_list) == 1:
    print(char_list[1])
else:
    sub_str = ""
    for c in char_list:
        print_sequences(list(sub_str + c), n)

请帮助我发展递归意识。

1 个答案:

答案 0 :(得分:2)

您非常亲密。您需要检查累积的“池”列表的长度是否等于参数len(char_list) == 1,而不是n。但是,要创建一个列表以累积组合,请在函数签名中创建一个附加参数:

def print_sequences(char_list, n, _accum):
  if len(_accum) == n:
     print(_accum)
  else:
     for c in char_list:
        print_sequences(char_list, n, _accum+[c])


print_sequences([1, 2, 3, 4], 4, [])

输出:

[1, 1, 1, 1]
[1, 1, 1, 2]
[1, 1, 1, 3]
[1, 1, 1, 4]
[1, 1, 2, 1]
[1, 1, 2, 2]
[1, 1, 2, 3]
[1, 1, 2, 4]
[1, 1, 3, 1]
[1, 1, 3, 2]
[1, 1, 3, 3]
[1, 1, 3, 4]
[1, 1, 4, 1]
[1, 1, 4, 2]
[1, 1, 4, 3]
[1, 1, 4, 4]
[1, 2, 1, 1]
....

编辑:将_accum实现为默认列表:

def print_sequences(char_list, n, _accum=[]):
  if len(_accum) == n:
    print(_accum)
  else:
    for c in char_list:
      print_sequences(char_list, n, _accum+[c])

print_sequences([1, 2, 3, 4], 4)