2017-07-28 36 views
1

这种递归方法如何工作产生排列给定一个字符串?有人可以解释我吗?我不明白这种递归方法在Python中产生排列

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 
+0

它被称为[“生成器”](https://wiki.python.org/moin/Generators) – rickdenhaan

+0

相关:https://stackoverflow.com/questions/231767/what-does-the-yield-keyword python – MLavrentyev

+0

@rickdenhaan:我认为这很清楚。我认为OP在理解代码的内部运作方面存在更多问题。 –

回答

1

的代码具有以下想法:通过从输入中选择一个元件传递所有排列和然后输送其余元件,由所选择的元件预先考虑的所有排列。之后,重复另一个元素。因此,如果您有[0,1,2]的输入,那么代码使用第一个元素(0)并构建剩余元素(1和2)的所有排列组合。 (当然,这些排列是[1,2]和[2,1])。

然后,它交付(产生)0前缀到[1,2],然后0前缀到[2,1],一世。即[0,1,2]和[0,2,1]。

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

等等。