使用数组中所有可能的组合理解递归

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 是集合 Sr 个元素的任意组合。

(特别是,按照刚刚介绍的例子,您可以想象 r = 3,和 n = 7 - 因为集合是 {a, b, c, d, e, f, x}。)

只有两种可能:

  1. C 包含 x(例如 C = {a, d, x}),或
  2. 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这样的组合。