【发布时间】:2012-12-21 16:21:48
【问题描述】:
我们在一个类中有这样的代码:
int SubsetSum(int arr[], int idx, int n, int S)
{
if (S == 0)
return 1; // This is stopping condition #1.
if (S < 0 || n == 0)
return 0; // This is stopping condition #2.
 return SubsetSum(arr, idx + 1, n - 1, S - arr[idx])
|| SubsetSum(arr, idx + 1, n - 1, S);
}
如果数组可以分成两个相等和的子数组(数组的和/2),则此代码返回 1。我想扩展这个函数,以便它返回两个带有数字的数组。
对于1,2,2,3,0 的输入,它应该返回:
arr1: 2,2
arr2: 3,1
我该怎么做?我不能使用循环,只能使用递归函数。
【问题讨论】:
-
您没有提到这两个条件,但是数组是否以零结尾?即,只能在数组中存在非零值吗?
-
是的,您可以假设要输入到原始数组中的数字是 0 或更大
-
我对它们是否可以是非负数不感兴趣。我想知道它们可以是 0。
-
顺便问一下,
idx、n和S变量是什么? -
n 是数组的大小,而 S 是整个数组的总和。 idx 是要检查的原始数组的索引。一开始是0。
标签: c recursion integer partitioning knapsack-problem