0
我從http://algorithms.tutorialhorizon.com/dynamic-programming-subset-sum-problem/找到了以下方法,它可以打印一個數組中的所有子集,並將它們相加成一定的數字。將內部遞歸方法的值傳遞給外部方法
我的代碼是完全我用來跟蹤遞歸調用打印語句:
public static void find(int[] A, int currSum, int index, int sum,
int[] solution, int tot) {
if (currSum == sum) {
tot +=1;
System.out.println("\nSum found ");
for (int i = 0; i < solution.length; i++) {
if (solution[i] == 1) {
System.out.print(" " + A[i]);
}
}
} else if (index == A.length) {
System.out.println("reached end");
return;
} else {
solution[index] = 1;// select the element
currSum += A[index];
System.out.println("incr " + A[index] + " "+ currSum + " ");
find(A, currSum, index + 1, sum, solution, tot);
currSum -= A[index];
System.out.println("decr " + A[index] + " "+ currSum + " ");
solution[index] = 0;// do not select the element
find(A, currSum, index + 1, sum, solution, tot);
}
return;
}
我想修改的方法,以便它也打印在端到端解決方案的最終數目。 我知道這個問題已經在Stackoverflow上討論過了,我發現了一些有趣的解決方案。不過,我想知道是否有辦法修改這個特定的方法。 我的想法是創建一個整數「tot」,我在找到解決方案後立即添加1,然後將更新的值傳遞給每個遞歸調用。但最終的值將在內部遞歸調用中找到,我不知道如何將最終值傳遞給外部方法。
非常感謝,這確實解決了我的問題 – Sebastian
很高興幫助:) –