使用数组中所有可能的组合理解递归
Understanding recursion using all possible combinations in an array
我试图借助几个例子来理解递归。我找到了这个使用递归打印大小为 n
的给定数组中 r
元素的所有可能组合的示例。
Print all possible combinations of r elements in a given array of size n.
他们使用表达背后的想法:
我在这里试图理解的是这个表达式的概念含义。我阅读了不同的文章,但找不到令人满意的解释。
使用此表达式的数学或实际示例将非常有帮助。
首先,数学中的组合有不同的表示法:
使用其中的第一个,你的公式是
它的左边表示:我们可以从n
集合中selectr
个元素的方法数元素。
设 S
为一组 n
个元素。让 x
作为它的最后一个元素,所以集合 S
例如
+-------------+---+
| a b c d e f | x |
+-------------+---+
设 C
是集合 S
中 r
个元素的任意组合。
(特别是,按照刚刚介绍的例子,您可以想象 r = 3
,和 n = 7
- 因为集合是 {a, b, c, d, e, f, x}
。)
只有两种可能:
C
包含 x
(例如 C = {a, d, x}
),或
C
不包含 x
(例如 C = {a, d, e}
)。
如果 C
包含 x
,则剩余的 (r - 1)
个元素(即我们示例中的 2
)是从剩余的 (n - 1)
个元素(即来自{a, b, c, d, e, f}
在我们的例子中) - 所以有
如何select这样的组合。
如果C
不包含x
,那么所有 r
个元素是从剩余的(n - 1)
个元素中选择的-所以有
如何select这样的组合。
我试图借助几个例子来理解递归。我找到了这个使用递归打印大小为 n
的给定数组中 r
元素的所有可能组合的示例。
Print all possible combinations of r elements in a given array of size n.
他们使用表达背后的想法:
我在这里试图理解的是这个表达式的概念含义。我阅读了不同的文章,但找不到令人满意的解释。
使用此表达式的数学或实际示例将非常有帮助。
首先,数学中的组合有不同的表示法:
使用其中的第一个,你的公式是
它的左边表示:我们可以从n
集合中selectr
个元素的方法数元素。
设 S
为一组 n
个元素。让 x
作为它的最后一个元素,所以集合 S
例如
+-------------+---+
| a b c d e f | x |
+-------------+---+
设 C
是集合 S
中 r
个元素的任意组合。
(特别是,按照刚刚介绍的例子,您可以想象 r = 3
,和 n = 7
- 因为集合是 {a, b, c, d, e, f, x}
。)
只有两种可能:
C
包含x
(例如C = {a, d, x}
),或C
不包含x
(例如C = {a, d, e}
)。
如果 C
包含 x
,则剩余的 (r - 1)
个元素(即我们示例中的 2
)是从剩余的 (n - 1)
个元素(即来自{a, b, c, d, e, f}
在我们的例子中) - 所以有
如何select这样的组合。
如果C
不包含x
,那么所有 r
个元素是从剩余的(n - 1)
个元素中选择的-所以有
如何select这样的组合。