我不理解python中的这个递归方法来生成排列

时间:2017-07-28 15:22:29

标签: python python-2.7 recursion permutation

这个递归方法如何在给定字符串的情况下生成排列?有人可以解释一下吗?

def exchange(self, s):
    if 0 == len(s):
        yield s
    else:
        for i in range(len(s)):
            for p in self.exchange(s[:i] + s[i + 1:]):
                yield [s[i]] + p

1 个答案:

答案 0 :(得分:1)

代码具有以下想法:通过从输入中选择一个元素来交付所有排列,然后提供所选元素前置的剩余元素的所有排列。在此之后,重复另一个元素。

因此,如果您输入[0,1,2],则代码使用第一个元素(0)并构建其余元素(1和2)的所有排列。 (这些排列当然是[1,2]和[2,1]。)

然后它传递(产生)前置于[1,2]的0,然后将0前置为[2,1],i。即[0,1,2]和[0,2,1]。

然后继续并选择下一个元素(1)。然后它构建剩余元素(0,2)的排列(即,[0,2]和[2,0])。

等等。