参考参数和递归?

时间:2017-02-23 19:16:52

标签: c++ function recursion reference pass-by-reference

我目前正在进行递归,并且想知道参考参数是否可以被改变并且在函数内给出不同的值,并且当递归地返回到相同的函数时,值会改变。这是我的问题,因为它没有编译。 这是一个例子:

bool findnum_recur (int wanted, int & num)
{
    // if i want to increment num and call the function recursively   

    /*like this : */

    findnum_recur (wanted, num+1);

    // its giving me error, why and is there an alternative way
 }   

3 个答案:

答案 0 :(得分:4)

不是这种情况。 num+1是一个右值,对非const个对象的引用不会绑定到右值。

将递归调用更改为:

int new_num=num+1;
findnum_recur (wanted, new_num);

这没关系。递归调用中的引用没有什么特别或神秘的东西。在这方面,参考参数与任何其他参数的工作方式没有区别。

或者,您可以将递归函数更改为:

bool findnum_recur (int wanted, const int & num)

,这将绑定到rvalue参数。

答案 1 :(得分:2)

findnum_recur(wanted, ++num);

左值参考不能绑定到+返回的右值。

答案 2 :(得分:0)

参考参数必须引用变量。 num+1不是变量,它是错误消息的来源。

在递归函数中使用引用参数非常好;如果你给出了你想要完成的任何暗示,那么你可以在这里帮助你。