Java递归实现数字根时return返回值错误但打印正常该如何排查?
问题根因
- 核心错误是递归调用处没有返回递归结果:你写的
digital_root(n);只是执行了递归逻辑,但是没有把递归调用得到的最终数字根作为当前方法的返回值,当前方法最后直接返回了本次相加得到的中间值n,所以才会出现递归内部打印正确、但外层调用拿到结果错误的情况。 - 代码存在冗余逻辑:你已经在方法开头判断了数字长度为1时直接返回,后续的
else分支永远不会被触发,属于无效代码。
修复方案
只需要把递归调用行修改为返回递归结果即可,修改后的完整代码如下:
public class DRoot { public static int digital_root(int n) { // 使用递归实现数字根计算 System.out.println(n + " before if and for loop"); String temporary = Integer.toString(n); int tempInteger = n; System.out.println(temporary.length() + " is temporary length"); if(temporary.length() == 1){ System.out.println("returns at beginning"); System.out.println("n before return is: " + n); return tempInteger; } n = 0; for(int i = 0; i < temporary.length(); i ++){ n += Integer.parseInt(temporary.substring(i, i+1)); System.out.println(n + " during if and for loop"); } // 直接返回递归调用的结果即可 return digital_root(n); } }
验证示例
比如输入1234:
- 第一层计算各位和为1+2+3+4=10,调用
digital_root(10) - 第二层计算1+0=1,调用
digital_root(1) - 第三层判断长度为1,返回1,该值会逐层向上返回,最终外层拿到的结果就是1,和打印的结果一致。
内容的提问来源于stack exchange,提问作者oscarGross
相关产品推荐
相关产品推荐

