检查给定的整数是否是仅使用递归的给定数组元素(或其中一部分)的总和

时间:2017-07-02 18:52:23

标签: arrays recursion

给定一个整数数组,我需要实现一个函数来检查某个部分数组是否等于给定的总和,仅使用递归。要实现的功能如下所示:

boolean isPartialSum(int[] array, int total);

我也可以使用以下函数,也只是递归地使用:

boolean isPartialSum(int[] array, int index, int total);

不允许使用循环,也不允许使用其他辅助函数。 对于输入{1,5,8}作为数组,输入9作为总数,答案应为真,因为1 + 8 = 9。

1 个答案:

答案 0 :(得分:0)

假设您有一个长度为a[]的数组n。然后,伪代码用于查找某些元素的总和是否给出了数字s

boolean isPartialSum (a[], i, s):
    if s == 0:
      return true
    if i == n:
      if a[n] == s:
        return true
      else:
        return false
    if i < n:
      if isPartialSum(a, i + 1, s - a[i]):
        return true
      else if isPartialSum(a, i + 1, s):
        return true
      else:
        return false

要了解arrat的某些元素是否加起来s,只需调用

即可
isPartialSum(a, 1, s)

假设您的数组的索引是从1编号。

更新校样:上面的算法递归地遍历a[]的所有子集(2^n子集)并且每个子集决定元素是否加起来{{1 }}。因此,算法是正确的。