2017-02-23 63 views
-2

即时通过递归,并想知道是否可以改变参考参数,并在函数内给予不同的值,并递归返回到同一个函数时,值会改变。这是我的问题,导致它不编译。 这里有一个例子:引用参数和递归?

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 
} 
+2

'num + 1'不是左值引用,请尝试'++ num'。并且被警告,**号**被修改。 – WhozCraig

+0

@NathanOliver我的意思是'num ++; findnum_recur(想,NUM);'。无论如何,评论仍然存在的唯一原因是因为我懒得删除它:P – user463035818

回答

0

引用参数有,你知道的,引用变量。 num+1不是一个变量,它是错误消息的来源。

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

+0

谢谢,我的问题不是与该计划,但理解问题只是想知道为什么我有这个具体的错误,如果它有用参考参数 –

2
findnum_recur(wanted, ++num); 

左值引用不能绑定到+返回的右值。

+0

@user:我认为你给作者太多的功劳。 –

+0

@ScottHunter我删除了我的评论,因为num ++仍然是一个右值..当我的大脑让我陷入尴尬的境地.. – user

3

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

更改递归调用:

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

,这将被罚款。在递归调用中没有什么特别的或神秘的引用。在这方面,参考参数的作用与其他参数没有区别。

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

bool findnum_recur (int wanted, const int & num) 

,这将绑定到右值参数。

+0

谢谢!并不熟悉右值和左值,而且我认为那是我老师的错。谢谢! –