Mô tả bài toán
Viết hàm đệ quy tính tổng các chữ số của một số, lặp lại cho đến khi kết quả chỉ còn 1 chữ số (digital root). Không chuyển đổi sang chuỗi.
Ví dụ minh họa
const num = 546767643;
const sumDigit = (num, sum = 0) => {
if (num) {
return sumDigit(Math.floor(num / 10), sum + (num % 10));
}
return sum;
};
const sumRepeatedly = num => {
while (num > 9) {
num = sumDigit(num);
}
return num;
};
console.log(sumRepeatedly(num));
Kết quả
3
Giải thích toán học
Đây là tính digital root. Công thức tối ưu O(1): num === 0 ? 0 : 1 + (num - 1) % 9.
Cách viết tối ưu
const digitalRoot = n => n === 0 ? 0 : 1 + (n - 1) % 9;