C中的子集和递归

时间:2018-06-28 07:21:54

标签: c recursion subset-sum

我编写了此函数,但它仅适用于非负整数。

int is_sum(int x, int a[], int n)

    {
        if (x == 0)
            return 1;
        if (n==0)
            return 0;

        return is_sum(x-a[n-1], a, n-1) || is_sum(x, a, n-1);
    }

如何使它在负整数上起作用,如何跳入2?

int is_sum(int x, int a[], int n)

    {
        if (x == 0)
            return 1;
        if (n==0)
            return 0;

        return is_sum(x-a[n-1], a, n-1) || is_sum(x, a, n-1);
    }

1 个答案:

答案 0 :(得分:2)

尝试以下解决方案:

int isSubsetSum(int a[], int n, int sum)
{
   if (sum == 0)
     return 1;
   if (n <= 0)
     return 0;

   return isSubsetSum(a, n-1, sum) || 
                        isSubsetSum(a, n-2, sum-a[n-1]);
}