【发布时间】:2014-03-07 07:42:09
【问题描述】:
运行时出现递归错误。并且参数不应该改变
n 是包含所需总和(目标)的子集的大小: 所以
set[] = {5,6,9,-1,4,2}
n = 3
sum = 10
等于真,因为大小为 3 的子集总和为 10 是 {9,-1,2}
public static boolean isSubsetSum(int[] set, int n, int sum) {
int[] copy = new int[set.length - 1];
System.arraycopy(set, 0, copy, 0, set.length - 1);
// Base Cases
if (sum == 0 && n == 0)
return true;
if (set.length == 0) // fixed base case.
return false;
if (set[set.length - 1] > sum) {
return isSubsetSum(copy, n, sum);
}
return isSubsetSum(copy, n, sum) || isSubsetSum(copy, n-1, sum - set[set.length-1]);
}
【问题讨论】: