1 回答

TA貢獻1780條經驗 獲得超5個贊
(1) 如果要添加和分配運算符是+=,而不是=+(這會將 +1 分配給 noOfSolutions)
(2) 你不需要一個新的向量,它也將是相同的(A 和 newA 它將具有相同的內存地址,因此對其中一個的更改將影響它們兩個)
(3) 你應該在遞歸調用后恢復你的堆棧更改
編輯
(4) 解決后應停止
public static int subSetSum(int i, int k, int A[]) {
int sum = A[0] + A[1] + A[2];
int noOfSolutions = 0;
if(k - sum < 0 || i >= A.length)
return 0;
if(k - sum == 0) {
System.out.println(A[0] + " + " + A[1] + " + " + A[2]);
--(1)--> noOfSolutions += 1;
--(4)--> return noOfSolutions;
}
noOfSolutions += subSetSum(i+1,k,A);
--(2)--> A[i] = A[i]+1;
noOfSolutions += subSetSum(i,k,A);
--(3)--> A[i] = A[i]-1;
return noOfSolutions;
}
例子
public static void main(String[] args) {
System.out.println(subSetSum(0, 4, new int[3]));
}
輸出
0 + 0 + 4
0 + 1 + 3
0 + 2 + 2
0 + 3 + 1
0 + 4 + 0
1 + 0 + 3
1 + 1 + 2
1 + 2 + 1
1 + 3 + 0
2 + 0 + 2
2 + 1 + 1
2 + 2 + 0
3 + 0 + 1
3 + 1 + 0
4 + 0 + 0
15
添加回答
舉報