通过引用传递递归函数
pass by reference recursion function
我很难理解引用传递是如何影响下面的递归函数的。
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。如果没有向量权重的引用语法,该函数可以正常工作。然而,当我通过引用传递时,函数返回错误的结果。
我知道这个问题与引用传递有关,但是有人能精确地指出引用传递导致这个问题的确切位置吗?
//编辑:这段代码似乎甚至可以通过引用传递。唯一的变化是先给vector rest赋值,然后再修改vector rest。
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);
}
}
每次调用isMeasureable
都从作为参数传入的vector的前面取出一个元素。当rest
被传递给三个递归的isMeasurable
调用时,它有不同的内容-每次调用它都会缩短一个元素。
不是物理地修改向量,而是传递一个额外的参数给isMeasurable
-和开始工作的偏移量。在进行递归调用时增加此偏移量。然后通过const引用传递weights
,并且不要复制。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何在Elixir中调用递归函数并行
- 递归函数有效,但无法记忆
- 为什么我的递归函数按降序打印,然后按升序打印?
- 为什么递归函数的最终输出是 5?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 如何将记忆应用于此递归函数?
- 如何从递归函数中完全返回,该函数给出了每个函数结果的累积相加?
- 无穷大而循环时具有递归函数
- 即使没有调用这个递归函数,它是如何工作的?
- 如何使此递归函数从给定的起始位置返回最小的整数?
- 此递归函数的每次迭代的值存储在哪里?
- C++ 引用类型作为递归函数参数
- 如何在递归函数中调用引用数组?
- 静态短引用在递归函数中产生错误
- 如何在 c++ 中将内置堆栈作为对递归函数的引用传递
- 通过引用传递递归函数
- 传递一个向量作为递归函数的引用
- 在递归函数中通过引用传递的数组 - 最后一列重新初始化
- 通过引用递归函数传递字符串或流对象时出现的段错误