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)