我有一个递归代码来计算唯一的排列。但是,这给了我一个分段错误(由于超出堆栈限制)。如何将其转换为迭代代码。我已经按照有关将递归代码转换为迭代的在线教程,但我的迭代代码不起作用。
class unique_element:
def __init__(self,value,occurrences):
self.value = value
self.occurrences = occurrences
def perm_unique(elements):
eset=set(elements)
listunique = [unique_element(i,elements.count(i)) for i in eset]
u=len(elements)
return perm_unique_helper(listunique,[0]*u,u-1)
def perm_unique_helper(listunique,result_list,d):
if d < 0:
yield list(result_list)
else:
for i in listunique:
if i.occurrences > 0:
result_list[d]=i.value
i.occurrences-=1
for g in perm_unique_helper(listunique,result_list,d-1):
print g
yield g
i.occurrences += 1