【问题标题】:Sub-set sum recursion in CC中的子集和递归
【发布时间】:2018-06-28 07:21:54
【问题描述】:

我写了这个函数,但它只适用于非负整数。

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

【问题讨论】:

  • 请提供示例输入以演示工作和非工作输入。
  • 会不会:return is_sum(x-a[n], a, n-2) || is_sum(x, a, n-1) bcoz 不允许相邻元素?
  • 显示代码适用于非负数并注意“无相邻数字”规则?我没有在代码中看到这一点,因为我希望 is_sum(x-a[n-1], a, n-2) 在某个地方。

标签: c recursion subset-sum


【解决方案1】:

试试这个解决方案:

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

【讨论】:

  • 工作!太感谢了!问候和祝福你!
  • 如果解决方案对您有用 @sher ,您可以接受它。欢迎使用 stackoverflow!
猜你喜欢
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多