Я использую функцию, приведенную ниже, чтобы рекурсивно проверить, существует ли подмножество (в векторе), которое суммирует данное число. В настоящее время, независимо от того, какова моя цель, результат верен. Я до сих пор не смог точно определить проблему.
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;
}
}
Задача ещё не решена.