0

我们在一个类中有一个代码,如下所示:

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

我怎样才能做到这一点?我不能使用循环,只能使用递归函数。

4

1 回答 1

1

您的前提条件不正确:您写了

如果数组可以分成两个等和的子数组,则此代码返回 1。

这不是真的。测试

int main() {
   int a[5];
   a[0] = 1; a[1] = 0; a[2] = 0; a[3] = 0; a[4] = 0;

   int const r1 = SubsetSum(a, 0, 5, 1);
   printf("%d\n", r1);

   return 0;
}

这将返回 '1' - 即使它不能被分成总和相等的子数组。

请考虑您的代码并准确描述您想要的内容。

于 2012-12-21T21:25:38.663 回答