在寫遞歸函數的時候,只在最後一層寫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啊 !!!