需要修改我的递归算法

时间:2014-10-14 06:14:34

标签: c++ data-structures vector

这是一个子集求和问题,它的工作正常,但我遇到了问题。我需要在main中初始化z = 0。但是有没有办法在没有初始化z = 0的情况下完成它。

所以根据主要它应该返回true,因为根据子集和问题,任何组合中向量中元素的总和应该等于target。

 bool r_x(vector<int> myvec, int y, int z=0){

        if( y == 0 )
            return true;

        if( z > myvec.size()-1)
            return false;

        return r_x(myvec, y, z+1) || r_x(myvec, y-myvec[z], z+1);
    }
int main(){
int z;
int y=7;

 vector<int> myvec;
    myvec.push_back(3);
    myvec.push_back(1);
    myvec.push_back(1);
    myvec.push_back(4);

r_x(vector<int> myvec, int z, int y);
}

输出:

false
false
false
false
false
false
false
true

输出应该是真的但是就像这样。

1 个答案:

答案 0 :(得分:3)

标准方法是将递归函数包装在非递归函数中

bool r_x_recursive(vector<int> myvec, int z, int y){

    if( y == 0 )
        return true;

    if( z > myvec.size()-1)
        return false;

    return r_x(myvec, z+1, y) || r_x(myvec, z+1, y-myvec[z]);
}

bool r_x(vector<int> myvec, int y) {
   return r_x_recursive(myvec, 0, y);
}

现在您可以拨打r_x(vec,3)