递归类方法sumNum编写求助:计算正整数中小于5的数字之和
递归实现sumNum方法的方案
嘿,刚接触递归模块不用慌,这个问题刚好能帮你理解递归的核心思路——把大问题拆成一个个小问题来解决。我给你详细讲讲怎么实现这个sumNum(int n)方法:
核心思路
递归的关键是找到终止条件和递推关系:
- 终止条件:当
n变成0时,说明已经没有数字需要处理了,直接返回0。 - 递推关系:每次只处理当前数字的最后一位,判断它是否小于5,如果是就把它加入总和,然后递归处理去掉最后一位后的数字(也就是
n / 10)。
代码实现(Java示例)
public class DigitSumCalculator { // 题目要求的递归方法 public static int sumNum(int n) { // 终止条件:没有数字可处理时返回0 if (n == 0) { return 0; } // 取当前数字的最后一位(用%10运算符) int lastDigit = n % 10; // 判断该数字是否小于5,是则贡献自身值,否则贡献0 int contribution = lastDigit < 5 ? lastDigit : 0; // 递归处理剩下的数字(n/10会去掉最后一位,因为是整数除法) return contribution + sumNum(n / 10); } // 测试示例 public static void main(String[] args) { // 题目给出的测试用例:84293841,预期返回14 System.out.println(sumNum(84293841)); // 输出14 } }
代码解释
咱们拿题目里的示例sumNum(84293841)走一遍流程,你就能更清楚:
- 第一次调用:
n=84293841,取最后一位1(小于5),贡献1,然后递归调用sumNum(8429384) - 第二次调用:
n=8429384,取最后一位4(小于5),贡献4,递归调用sumNum(842938) - 第三次调用:
n=842938,取最后一位8(不小于5),贡献0,递归调用sumNum(84293) - 第四次调用:
n=84293,取最后一位3(小于5),贡献3,递归调用sumNum(8429) - 第五次调用:
n=8429,取最后一位9(不小于5),贡献0,递归调用sumNum(842) - 第六次调用:
n=842,取最后一位2(小于5),贡献2,递归调用sumNum(84) - 第七次调用:
n=84,取最后一位4(小于5),贡献4,递归调用sumNum(8) - 第八次调用:
n=8,取最后一位8(不小于5),贡献0,递归调用sumNum(0) - 第九次调用:
n=0,触发终止条件,返回0
把所有贡献加起来:1+4+0+3+0+2+4+0+0=14,完全符合题目要求!
边界情况测试
- 当n是个位数时:
sumNum(3)返回3,sumNum(6)返回0 - 当n全是小于5的数字时:
sumNum(1234)返回1+2+3+4=10
内容的提问来源于stack exchange,提问作者Blood Stark
相关产品推荐
相关产品推荐

