我使用下面给出的函数递归检查是否存在一个子集(在向量中),该子集总和为给定数字。目前,无论我的目标是什么,输出都是真的。到目前为止,我还未能找到问题所在。
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;
编辑:所以我做了以下更改,以某种方式达到函数在main中调用时输出true或false的程度。例如,check(vec,n,sum,write);
和vec={1,2,3}
的{{1}}应该只输出sum=4
。目前我添加了一个额外的参数,以某种方式指定何时打印输出但到目前为止没有成功。任何帮助表示赞赏!
true