Подкурсная сумма рекурсии в C - PullRequest
0 голосов
/ 28 июня 2018

Я написал эту функцию, но она работает только с неотрицательными целыми числами.

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 голосов
/ 28 июня 2018

Попробуйте это решение:

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]);
}
...