2017-02-23 72 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

謝謝!並不熟悉右值和左值,而且我認爲那是我老師的錯。謝謝! –