题目
编写递归函数计算一个非负整数各位十进制数字之和。
输入格式:一行输入一个非负整数 n。
输出格式:输出一个整数,表示该数各位数字相加的总和,末尾换行。
数据范围与约定:0 ≤ n ≤ 2×109。
思路与算法
1. 递归拆解逻辑
递归基:当 n < 10 时,只有一位数字,直接返回 n;
递推步:多位数之和等于当前个位数 n % 10 加上高位剩余数字的和 sumDigits(n / 10)。
2. 调用深度
32 位整数最多 10 位,递归层数不超过 10 层,调用栈开销极小。
完整程序
import java.util.Scanner;
public class Main {
// 递归计算非负整数各位十进制数字之和
public static int sumDigits(long n) {
if (n < 10) {
return (int) n;
}
return (int) (n % 10) + sumDigits(n / 10);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
System.out.println(sumDigits(n));
}
}运行示例
输入:
1234输出:
10