我在递归方面遇到了一些麻烦,特别是对于列表。我不理解递归建立列表的过程'很好,因为我没有真正得到列表的创建地点。我已经让这个程序打印出len(string)
的所有排列,但我想扩展它,以便它也给我{1}}的长度为1的排列。这是我得到的:
len(string) - 1
给出了:
def subset(string):
result = []
if len(string) == 0:
result.append(string)
return result
else:
for i in range(len(string)):
shorterstring = string[ :i] + string[i+1: ]
shortersets = subset(shorterstring)
for s in shortersets:
result.append(string[i] + s)
return result
我不明白为什么当我将print(subset("rum"))
['rum', 'rmu', 'urm', 'umr', 'mru', 'mur']
改为result.append(string[i] + s)
时,我根本没有输出。
答案 0 :(得分:0)
如果您将result.append(string[i] + s)
更改为result.append(s)
,则代码只会在len(string)
时向results
添加len(string) == 0
长度的排列。
要使代码生成所有排列,最后一个for循环必须是:
for s in shortersets:
result.append(string[i] + s)
result.append(s)
请注意,当与原始代码一起使用时,实际上最终会将相同排列的多个实例添加到最终输出中。您可以通过results
set
而不是list
来解决此问题,但您可能需要尝试重新编写代码以完全避免这种低效率。