algorithm - 递归打印数组排列的算法是如何工作的?

标签 algorithm recursion permutation

我只是不明白这个算法是如何工作的。我看到的所有解释都说,如果你有一个集合,例如 {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/

相关文章:

javascript - 展平嵌套对象,保留父对象的属性

python - 选择适当的算法来创建和计算元素共享对的排列

sql - 在 SQL (T-SQL) 中做高级逻辑 - 匹配算法

python - 在 Python 中实现 Karatsubas 乘法算法

c# - 如何在 KnapSack 问题中显示所有包含的数字?

algorithm - 当它总是选择第二个最小的元素作为子列表中的枢轴时,快速排序时间复杂度

c++ - 在 C/C++ 中递归查找最大差值对

javascript - 基于另一个对象递归更新特定键的嵌套对象值

bash - 从更大的列表中创建 4 个元素的所有组合

sql - 在 SQL 中排列值