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

Python 使用递归从字符列表打印n个长度的组合,python,python-3.x,list,recursion,combinations,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:

我必须用递归来解决这个问题

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

请帮我培养一些递归的意识。

你已经很接近了。您需要检查累积的“池”列表的长度是否等于参数
n
,而不是
len(char\u list)==1。但是,要创建一个列表来累积组合,请在函数签名中创建一个附加参数:

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]
....
编辑:实现
\u 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)

如果您的函数需要为_acum提供一个空列表,为什么不将其设置为可选并将其默认为该值
def print_sequences(char_list,n,_acum=[]):
@AdamDadvar这是一种可能性,但是,默认参数可以在后续函数调用中生成。通常,处理默认参数的最佳方法是将参数实际设置为
None
,然后在函数的后面将该值重新指定为真正需要的默认值。然而,我认为在这个问题的上下文中,这个过程是过分的。除了char_list和n之外,我们不能接收任何参数。我能做什么?函数必须有最多2个参数的签名:“char_list”和“n”。请你解释一下,我怎样才能使自己习惯于递归思考?