今天看见一个全排列的递归算法觉得非常巧妙,稍稍改进了一下函数的接口,更方便的运用:
def Allrange(lyst,start,end,result):
if start == end:
result.append(copy.copy(lyst))
for i in range(start,end+1):
lyst[i],lyst[start] = lyst[start],lyst[i]
Allrange(lyst,start+1,end,result)
lyst[i],lyst[start] = lyst[start],lyst[i]
return result
对于python2版本没有列表浅拷贝,就引用copy模块
python3 可以直接调用 list.copy()方法。
纠结的人总喜欢弄清递归的每一步变化,所以可以在数据变化之后立刻输出,人工监视递归数据的变化。
我就很佩服那种递归一写终止条件一写就能直接运行的人,我一般都得演练两三轮。大家有好的方法可以告诉我!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。