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

时间:2019-02-12 16:59:06

标签: java recursion combinations permutation mathematical-expressions

我试图借助几个示例来理解递归。我发现了使用递归在给定大小r的数组中打印n元素的所有可能组合的示例。

Print all possible combinations of r elements in a given array of size n.

他们正在使用表达式背后的想法:

enter image description here

我在这里想要理解的是该表达的概念含义。我读过不同的文章,但找不到令人满意的解释。

使用此表达式的数学或实际示例将非常有帮助。

1 个答案:

答案 0 :(得分:2)

首先,数学中的组合有不同的表示法:

enter image description here

使用第一个,您的公式是

enter image description here

它的左侧表示:方法数量,我们可以从r个元素集中选择n个元素。

S是一组n元素。假设x是它的最后一个元素,那么集合S例如

+-------------+---+
| a b c d e f | x |
+-------------+---+

C是集合rS个元素的任意组合。

(特别是,按照刚刚介绍的示例,您可以想象r = 3n = 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)个元素(即{{ 1}}(在我们的示例中)-有

enter image description here

如何选择这种组合。

如果2不包含(n - 1),则从其余{a, b, c, d, e, f}个元素中选择所有C元素-因此有

enter image description here

如何选择这种组合。