修改子集是递归算法的总和

时间:2014-10-14 18:24:50

标签: c++ algorithm recursion

目前,我有以下递归算法来解决子集和问题。它检查给定向量中的任何元素组合是否总和到目标数。例如,如果A= {1,2,3,4,5}target = 8,则应将true作为1+2+5=8返回。目前它完美无缺。但是我想对它做一个改变。我将值分配给main中的一个函数参数,我试图不这样做。我想做的就是在我的主要部分调用该功能。我不确定如何尝试这样做。任何帮助表示赞赏!!

bool subsetsum_imp(vector<int> & vec, int n, int sum) {

    if (sum == 0) {
        return true;
    }

    if (n == 0 && sum != 0) {
        return false;
    }

    if (vec[n-1] > sum)     
        return subsetsum_imp(vec, n-1, sum); 

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

值n在我的main中分配如下,否则算法不起作用,我怎么能以某种方式将它合并到我的函数中所以我不必在我的主函数中写它?

int n = sizeof(vec)/sizeof(vec[0]);

1 个答案:

答案 0 :(得分:2)

使用调用递归函数的包装函数。类似的东西:

bool subsetsum( vector<int> & vec, int sum )
{
    return subsetsum_imp( vec, vec.size(), sum );
}