考虑找到具有n个元素的集合的k个元素子集的问题。编写一个递归函数,该函数将代表集合的整数数组,集合中的整数数量(n)和所需的子集大小(k)作为输入,并在屏幕上显示具有k个元素的所有子集。您可以假设数组中的元素具有唯一值。例如,如果数组(集合)包含元素[8 2 6 7],n为4,k为2,则输出为82 86 87 26 27 67。
您能帮我这个忙,至少告诉我应该怎么做吗?
答案 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
请注意,因为顺序在集合中不起作用,所以它足以沿一个方向越过元素