【发布时间】:2023-03-15 16:22:01
【问题描述】:
我很难理解通过引用传递是如何影响下面的递归函数的。
bool isMeasureable(int target, vector<int>& weight){
if (weight.empty()) {
return target==0;
}else{
int value = weight.front();
weight.erase(weight.begin());
vector<int> rest=weight;
return isMeasureable(target, rest)
|| isMeasureable(target-value, rest)
|| isMeasureable(target+value, rest);
}
}
这个函数主要检查是否可以用给定的重量来测量一个数量。举个例子, 如果向量权重包含 1 和 3,则如果目标是 2(如 3 - 1 =2)或 4(如 1+3 =4),则函数返回 true。 如果没有向量权重的参考语法,该函数可以正常工作。但是,当我通过引用传递时,该函数返回错误的结果。
我知道这个问题与引用传递有关,但有人能指出引用传递导致此问题的确切位置吗?
//编辑:即使通过引用传递,此代码似乎也可以工作。唯一的变化是先分配给向量剩余,然后再修改向量剩余。
bool isMeasureable(int target, vector<int> & weight){
if (weight.empty()) {
return target==0;
}else{
int value = weight.front();
vector<int> rest=weight; // change made
rest.erase(rest.begin()); //change made
return isMeasureable(target, rest)
|| isMeasureable(target-value, rest)
|| isMeasureable(target+value, rest);
}
}
【问题讨论】:
标签: c++ recursion pass-by-reference