Python 使用递归从字符列表打印n个长度的组合
我必须用递归来解决这个问题 在Python中实现一个函数,该函数接收字符列表和整数n作为参数。函数必须以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:
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”。请你解释一下,我怎样才能使自己习惯于递归思考?