经常犯的错误之递归写不全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啊 !!!