You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归类方法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)走一遍流程,你就能更清楚:

  1. 第一次调用:n=84293841,取最后一位1(小于5),贡献1,然后递归调用sumNum(8429384)
  2. 第二次调用:n=8429384,取最后一位4(小于5),贡献4,递归调用sumNum(842938)
  3. 第三次调用:n=842938,取最后一位8(不小于5),贡献0,递归调用sumNum(84293)
  4. 第四次调用:n=84293,取最后一位3(小于5),贡献3,递归调用sumNum(8429)
  5. 第五次调用:n=8429,取最后一位9(不小于5),贡献0,递归调用sumNum(842)
  6. 第六次调用:n=842,取最后一位2(小于5),贡献2,递归调用sumNum(84)
  7. 第七次调用:n=84,取最后一位4(小于5),贡献4,递归调用sumNum(8)
  8. 第八次调用:n=8,取最后一位8(不小于5),贡献0,递归调用sumNum(0)
  9. 第九次调用: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:22:10