这是一个子集求和问题,它的工作正常,但我遇到了问题。我需要在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
输出应该是真的但是就像这样。
答案 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)
。