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

Arrays 仅使用递归检查给定整数是否为给定数组元素(或其一部分)的和,arrays,recursion,Arrays,Recursion,给定一个整数数组,我需要实现一个函数来检查某个部分数组是否等于给定的和,只使用递归。要实现的函数如下所示: boolean isPartialSum(int[] array, int total); 我还可以使用以下函数,也只能递归使用: boolean isPartialSum(int[] array, int index, int total); 不允许使用循环,也不允许使用其他辅助函数。 对于{1,5,8}作为数组和9作为总数的输入,答案应该是真的,因为1+8=9。假设您有一个长度为n

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

boolean isPartialSum(int[] array, int total);
我还可以使用以下函数,也只能递归使用:

boolean isPartialSum(int[] array, int index, int total);
不允许使用循环,也不允许使用其他辅助函数。
对于{1,5,8}作为数组和9作为总数的输入,答案应该是真的,因为1+8=9。

假设您有一个长度为
n的数组
a[]
。然后,用于查找某些元素之和是否给出数字
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
假设数组的索引从
1
开始编号


更新证明:上述算法递归迭代
a[]
(即
2^n
子集)的所有子集,并为每个子集决定元素的总和是否为
s
。因此,算法是正确的。

那么,是否有关于数据集(即提供的数组)的任何规范?没有,只是它们都是整数。除了某些情况外,这是不够的。这并不是那么直截了当。如果数组元素的和不是附加的,那么这就不起作用了。添加了s=0的情况,并证明了算法是有效的。ps:如果我对任务理解错误,请纠正我。
isPartialSum(a, 1, s)