修改递归子集和算法

时间:2014-10-11 18:25:33

标签: c++ algorithm recursion

我使用下面给出的函数递归检查是否存在一个子集(在向量中),该子集总和为给定数字。但是我想对它进行一次修改。我在我的main方法中使用下面的代码段打印true或false。如何将其合并到我的check函数中,以便我在main方法中所做的只是调用函数?

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

我检查子集是否存在的功能。

bool check(vector<int> vec, int sum, int n)
{
   if (sum == 0)
     return true;
   if (n == 0 && sum != 0)
     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]));      
}

1 个答案:

答案 0 :(得分:1)

只需打印check的返回值,std::boolalpha即可,如果其他内容是多余的话:

cout << std::boolalpha << check(vec, n, sum) << std::noboolalpha << endl;

或者如果您真的想要调用该函数:

bool check(vector<int> vec, int sum, int n)
{
   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]));      
}