Неправильный вывод с алгоритмом суммирования подмножеств?

Я использую функцию, приведенную ниже, чтобы рекурсивно проверить, существует ли подмножество (в векторе), которое суммирует данное число. В настоящее время, независимо от того, какова моя цель, результат верен. Я до сих пор не смог точно определить проблему.

bool check(vector<int> vec, int n, int sum)
{
if (sum == 0)
{
cout << "true" << endl;
return true;
}
if (n == 0 && sum != 0)
{
cout << "false" << endl;
return false;
}
if (vec[n-1] > sum)
return check(vec, n-1, sum);

return check(vec, n-1, sum || check(vec, n-1, sum-vec[n-1]));
}

Если я добавлю следующий фрагмент к своему основному и удалим строки cout из моей функции проверки, он будет работать отлично, однако я хочу только вызвать функцию в моем основном и не добавлять никаких дополнительных строк.

 if (check(vec, n, sum) == true)
cout << "true" << endl;
else
cout << "false" << endl;

РЕДАКТИРОВАТЬПоэтому я внес следующие изменения, чтобы как-то добраться до точки, где функция выводит либо true, либо false при вызове в main. Например, check(vec,n,sum,write);за vec={1,2,3} а также sum=4 должен просто вывести true, В настоящее время я добавил дополнительный параметр, чтобы как-то указать, когда печатать вывод, но пока безуспешно. Любая помощь приветствуется!

   bool check(vector<int> vec, int n, int sum, bool write)
{
if (sum == 0)
{
cout << "true" << endl;
write=true;
return true;
}
if (n == 0 && sum != 0)
{
cout << "false" << endl;
write=true;
return false;
}
if (vec[n-1] > sum)
return check(vec, n-1, sum, write=false);

return check(vec, n-1, sum, write=false) || check(vec, n-1, sum-vec[n-1], write=false);

if (write) {
cout << check(vec,n,sum,write) << endl;
}

}

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]