我只是不明白这个算法是如何工作的。我看到的所有解释都说,如果你有一个集合,例如 {A, B, C} 并且你想要所有的排列,从每个字母开始明确,然后找到其余字母的排列。例如 {A} + permutationsOf({B,C})。
但是所有的解释似乎都掩盖了您如何找到其余的排列。一个例子是 this one .
有人可以尝试向我更清楚地解释这个算法吗?
最佳答案
要了解递归,您需要了解递归..
(c) 程序员的智慧
你的问题是关于那个事实,“其余的排列”是那个递归部分。递归总是由两部分组成:普通情况和递归情况。平凡的情况指的是递归没有继续并且应该返回一些东西的情况。
在您的示例中,微不足道的部分是 {A}
- 这个集合只有一个排列 - 本身。递归部分将是当前元素和这个“剩余部分”的并集——也就是说,如果你有多个元素,那么你的结果将是这个元素和“剩余部分”之间排列的并集。在排列方面:其余部分是没有选定元素的当前集合。 IE。对于第一个递归步骤的集合 {A,B,C}
将是 {A}
和“rest part”:{B,C}
,然后是 {B}
和“rest part”:{A,C}
- 最后是 {C}
和“rest part” ": {A,B}
所以你的递归将持续到“其余部分”将是单个元素的那一刻 - 然后它就会结束。
关于algorithm - 递归打印数组排列的算法是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19226649/