递归函数removeMin返回值不符预期:期望4实际返回1求助
问题排查与修复
问题根源
你的递归调用存在返回值丢失的问题:当进入else分支调用removeMin(tempArr, count)时,你没有接收并返回这个递归调用的结果,而是继续执行后续的return count。这意味着只有最底层递归(tempArr.length == 0时)返回了正确的4,但上层的所有递归调用都会忽略这个结果,直接返回自己当前的count值(第一次调用时count是1,所以最终返回1)。
修复方案
只需要在else分支中返回递归调用的结果,而不是仅仅调用它。修改后的代码如下:
public int removeMin(Integer[] arr, int count) { Integer[] tempArr = new Integer[arr.length - 1]; int index = 0; for (int i = 1; i < arr.length; i++) { tempArr[index] = arr[i] - arr[0]; index++; } count = count + 1; if (tempArr.length == 0) { return count; } else { // 关键修改:返回递归调用的结果 return removeMin(tempArr, count); } }
验证逻辑
当输入arr = {2,5,8,11}、count = 0时:
- 第一次调用:
arr.length=4,tempArr.length=3,count变为1,递归调用removeMin(tempArr, 1) - 第二次调用:
arr.length=3,tempArr.length=2,count变为2,递归调用removeMin(tempArr, 2) - 第三次调用:
arr.length=2,tempArr.length=1,count变为3,递归调用removeMin(tempArr, 3) - 第四次调用:
arr.length=1,tempArr.length=0,count变为4,触发return count,返回4 - 上层递归依次接收这个返回值并传递回去,最终整个函数返回4,符合预期。
内容的提问来源于stack exchange,提问作者ansh87
相关产品推荐
相关产品推荐

