Java递归逻辑报错求助:base case存疑且控制台错误信息过多
Java递归逻辑报错求助:base case存疑且控制台错误信息过多
嘿,我一眼就瞅出几个关键问题,这就是你控制台刷满错误的根源:
致命bug:每次递归都把节点重置成头节点
你在方法第一行写了node = headNode;,这意味着不管递归调用时传的是node.next,一进方法就被拉回链表头部!直接导致递归永远走不到node == null的base case,无限循环调用下去,最后必然触发StackOverflowError,控制台自然被栈追踪信息填满了。赶紧把这行删掉!base case缺少返回值
你的方法声明要返回boolean,但当node == null时,你只打印了差值,没写return语句。这会导致编译错误,或者运行时出现未定义的返回值问题。得在这里返回一个符合逻辑的boolean值,比如返回true表示遍历完成,或者根据你的实际需求返回判断结果。递归逻辑的小优化建议
你把当前节点值加到较小的subSum里的思路没问题,但前提是得正确遍历链表——删掉node = headNode;之后,每次递归传node.next才能一步步走到链表末尾。另外差值建议取绝对值,输出正数会更合理。
给你修正后的代码参考:
public boolean smallestDifference(Node node, int subSum1, int subSum2) { // 删掉这行错误代码:node = headNode; // 正确的base case:遍历完链表时 if (node == null) { System.out.println("Smallest difference:"); System.out.println(Math.abs(subSum1 - subSum2)); // 取绝对值优化 return true; // 补充返回值,可根据需求调整 } if (subSum1 <= subSum2) { return smallestDifference(node.next, subSum1 + node.value, subSum2); } else { return smallestDifference(node.next, subSum1, subSum2 + node.value); } }
另外,以后遇到控制台被错误信息填满的情况,你可以在Eclipse里调整控制台的输出限制,或者直接看栈追踪的顶部(StackOverflowError的根源一般都是无限递归),找到自己代码的那行,就是问题所在。
备注:内容来源于stack exchange,提问作者Efin Barbwedy
相关产品推荐
相关产品推荐

