【问题标题】:Modifying a recursive subsets-sum algorithm修改递归子集和算法
【发布时间】:2014-10-11 18:25:33
【问题描述】:

我正在使用下面给出的函数递归检查是否存在(在向量中)总和为给定数字的子集。但是,我想对其进行一项修改。我在我的 main 方法中使用下面的 sn-p 打印 true 或 false。如何将其合并到我的检查函数中,以便我在 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]));      
}

【问题讨论】:

    标签: c++ algorithm recursion


    【解决方案1】:

    只打印check 的返回值,std::boolalpha 你的 if else 是多余的:

    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]));      
    }
    

    【讨论】:

    • 非常感谢!完成这项工作,我正在编写 cout 语句,但没有正确实现循环。
    • 其实,经过进一步的测试,我意识到无论目标是什么..函数总是返回true..我还不能确定问题所在(我说的是你的顺便说一下第二个解决方案)。
    • 我没有看你的回报,很奇怪,试试return check(vec, n-1, sum-vec[n-1]);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 2016-02-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多