跟隨this method (pdf)來實現一個遞歸解決方案,但我認爲它是越野車。我已經完全按照pdf文件中的描述實施它。發現子集和遞歸地產生不正確的輸出
下面的代碼的輸出是錯誤的。它顯示了目標位置。目標數組包含應該添加以獲得總和的數字的比特表示。
將binary[i] = 1
置於else if
條件可以修復問題,但它沒有任何意義。
有沒有可能澄清什麼是正確的解決方案?
#define SIZE(a) sizeof(a)/sizeof(a[0])
int binary[100];
void foo(int target, int i, int sum, int *a, int size) {
binary[i] = 1;
if (target == sum+a[i]) {
int j;
for (j=0;j<size;j++)
printf("%d\n", binary[j]);
return;
} else if ((i+1 < size) && (sum + a[i] < target)) {
foo(target, i+1, sum + a[i], a, size);
}
if ((i+1 < size) && (sum +a[i+1] <= target)) {
binary[i] = 0;
foo(target, i+1, sum, a, size);
}
}
int main()
{
int i, target =10,a[] = {1, 2, 3, 5, 100};
foo(target, 0, 0, a, SIZE(a));
}
電流輸出:0 1 1 1 1
預期輸出:0 1 1 1 0
哪種語言? C? C++?請相應標記 –
請添加當前輸出,並輸入您期望的正確輸出。還要儘量讓自己更容易,不要使用't','i'和'a',而是使用有意義的變量名稱。 – wimh