經常犯的錯誤之遞歸寫不全return

 

 

在寫遞歸函數的時候,只在最後一層寫return,中間的過程沒有return,導致結果的丟失。

舉個例子

 1 LL query(LL i, LL k)
 2 {
 3     if (sum[i] < k)
 4     {
 5         return -1;
 6     }
 7   
 8     if (con[i].l == con[i].r)
 9     {
10         return con[i].l;
11     }
12   
13     if (k <= sum[i << 1])
14     {
15         query(i << 1, k);
16     }
17     else
18     {
19         query(i << 1 | 1, k - sum[i << 1]);
20     }
21 }

 

 

第15行應該是" return query(i << 1, k);",19行也應當加return語句。 如果沒有寫,那麼 由於在倒數第二層沒有把最後一層的結果返回給倒數第三層,從倒數第三層之後的就丟失了正確的答案。

 

!!!記住寫return啊 !!!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章