2017-07-28 62 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])的排列。

等等。