查找具有n个元素的集合的k个元素子集的递归方法

时间:2018-12-04 17:36:45

标签: recursion

考虑找到具有n个元素的集合的k个元素子集的问题。编写一个递归函数,该函数将代表集合的整数数组,集合中的整数数量(n)和所需的子集大小(k)作为输入,并在屏幕上显示具有k个元素的所有子集。您可以假设数组中的元素具有唯一值。例如,如果数组(集合)包含元素[8 2 6 7],n为4,k为2,则输出为82 86 87 26 27 67。

您能帮我这个忙,至少告诉我应该怎么做吗?

2 个答案:

答案 0 :(得分:0)

您要说的是** combination &&。 在Wikipedia page中间有一个递归的计算定义。

$$ \ binom {n} {k} = \ binom {n-1} {k-1} + \ binom {n-1} {k} $$

弄清楚您的基本情况可能有些棘手,但我认为您所需要的一切都在那里。

答案 1 :(得分:0)

我会这样的事情:

subset ( numbers, n, k, index)
{
   if (index < n) // end for the recursion. passed through all elements
   {
      if (k == 0) // end for the recursion. no more elements needed
         print ' '
      else
      {
         print numbers[index]
         subset(numbers, n, k-1, index+1) // uses the number in the current index

         subset(numbers, n, k, index+1)   // doesn't use the number in the current index
      }
   }

call subset(numbers, n, k, 0) to start

请注意,因为顺序在集合中不起作用,所以它足以沿一个方向越过元素