моего вклада:Subset Sum с помощью рекурсивного
W[10] = {1, 3, 5, 7, 9, 12, 19, 22, 36, 63}
X[10] = {0};
M = 79;
я назвал функцию:
findSolution(0,0,177); <br>
Примечание: 177 является суммой всех элементов внутри W массива.
void findSolution(int s, int k, int r) {
cout << "fn(" << s << " , " << k << ", " << r << ")" << endl;
X[k] = 1;
if (s + W[k] == M){
printArr(X);
}
else if (s + W[k] + W[k + 1] <= M) {
return findSolution(s + W[k], k + 1, r - W[k]);
}
if ((s + r - W[k] >= M) && (s + W[k + 1]) <= M){
X[k] = 0;
return findSolution(s, k + 1, r - W[k]);
}
}
Выход:
fn(0 , 0, 177)
fn(1 , 1, 176)
fn(4 , 2, 173)
fn(9 , 3, 168)
fn(16 , 4, 161)
fn(25 , 5, 152)
fn(37 , 6, 140)
fn(56 , 7, 121)
Выходной приведенный выше, чтобы отслеживать вызовы функций. Выход заканчивается здесь и не идет вперед. Что не так с моим кодом. Я пытаюсь напечатать подмножество, которое дает желаемую сумму = 79. Рекурсивный вызов не возвращается.
Какой должен быть * выход? Или вы могли бы хотя бы описать, что это должно делать? –