需要修改我的递归算法
Need to modify my recursive algorithm
这是一个子集和问题,它工作正常,但我遇到了一个问题。我需要在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)
。
相关文章:
- 如何使用递归循环我的代码(当用户输入无效输入时,它会再次提示他们)?
- 需要为 C++ 中的以下问题设计递归算法
- 这种用于查找连续子数组中最大和的递归算法有什么优势吗?
- 任何人都可以查明我的递归函数中的错误吗?
- 如何改进搜索二项式系数的递归算法
- 如何转换多次调用自己的递归算法?
- 如何将字符串保存在最长的常见子序列递归算法中
- 我的编辑距离递归代码中的字符类型有问题
- 可传递值影响递归算法的渐近时间复杂性
- Python到C++:使用递归列出背包的所有组合的算法
- 我的递归算法中的问题,用于查找所有最短、唯一的路径
- 带有两个递归调用的递归算法的时间复杂性
- 递归算法中的分段错误
- 我的二进制搜索树 c++ 的递归函数中的错误 C2784 无法推断模板参数
- O(n^m) 复杂度的递归算法
- 需要修改我的递归算法
- 为什么我不能递归调用我的函数?
- 递归算法对数组中值小于x的每个元素求和
- 在递归下降语法分析器中避免了递归算法中的stackoverflow
- 在我的简单测试中,Java在递归算法速度比较上胜过c++