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

 

posted @ 2019-10-27 21:06  Daybreaking  阅读(497)  评论(0编辑  收藏  举报