给定一个整数数组,我需要实现一个函数来检查某个部分数组是否等于给定的总和,仅使用递归。要实现的功能如下所示:
boolean isPartialSum(int[] array, int total);
我也可以使用以下函数,也只是递归地使用:
boolean isPartialSum(int[] array, int index, int total);
不允许使用循环,也不允许使用其他辅助函数。 对于输入{1,5,8}作为数组,输入9作为总数,答案应为真,因为1 + 8 = 9。
答案 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 }}。因此,算法是正确的。