我必须使用递归来解决此练习。
在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)
请帮助我发展递归意识。
答案 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)