需要修改我的递归算法

Need to modify my recursive algorithm

本文关键字:递归算法 我的 修改      更新时间:2023-10-16

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

因此,根据main,它应该返回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

输出应该是真的,但它是这样的。

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

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)