如何使用递归方法计算给定数字各数位的阶乘之和
实现方案
你现有的两个递归方法已经覆盖了核心能力,只需调整数位求和的逻辑,把原来累加数位本身的规则替换为累加该数位的阶乘结果即可。
完整可运行代码
// 阶乘计算方法(保留你原有实现即可) public static int factorial(int n) { if (n == 0) { return 1; } return n * factorial(n - 1); } // 调整后的数位阶乘求和方法 public static int sumOfDigitFactorial(int n) { if (n == 0) { return 0; } // 取当前个位数字计算阶乘,叠加剩余高位的阶乘和 return factorial(n % 10) + sumOfDigitFactorial(n / 10); }
验证示例
输入n=145时的执行流程:
- 第一层调用:n=145,取个位5计算阶乘得120,剩余高位14进入递归
- 第二层调用:n=14,取个位4计算阶乘得24,剩余高位1进入递归
- 第三层调用:n=1,取个位1计算阶乘得1,剩余高位0进入递归
- 第四层调用:n=0触发终止条件返回0
- 逐层求和结果:120 + 24 + 1 + 0 = 145,和预期结果一致。
可选边界优化
如果需要兼容输入值为0的场景(0的数位阶乘和为0! =1),可将sumOfDigitFactorial的递归终止条件调整为:
if (n == 0) { return factorial(0); }
内容的提问来源于stack exchange,提问作者non
相关产品推荐
相关产品推荐

