이번 글에서는 숫자의 각 자릿수를 재귀적으로 더하여, 결과가 한 자리 수가 될 때까지 이 과정을 반복하는 JavaScript 함수를 작성하는 방법을 알아보겠습니다.
여기서 중요한 조건은 숫자를 문자열(String)이나 다른 데이터 타입으로 변환하지 않고 처리해야 한다는 점입니다. 즉, 오직 산술 연산만을 사용해 문제를 해결해야 합니다.
그럼 바로 함수의 코드를 살펴보겠습니다.
예제
아래는 해당 기능을 구현한 코드입니다.
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));
코드 설명
sumDigit 함수는 재귀 호출을 활용해 숫자의 모든 자릿수를 더하는 역할을 합니다. num % 10 연산으로 가장 뒤의 자릿수를 하나씩 추출해 더하고, Math.floor(num / 10)으로 이미 더한 자릿수를 제거한 값으로 재귀 호출을 이어갑니다. 숫자가 0이 되면 누적된 합계를 반환합니다.
sumRepeatedly 함수는 숫자가 두 자리 이상인 동안(9보다 클 때) sumDigit 함수를 계속 호출하며, 최종적으로 한 자리 수가 남으면 그 값을 반환합니다.
참고로 이렇게 얻어진 최종 값은 수학에서 '디지털 루트(digital root)'라고 불리는 개념과 같습니다. 예제의 546767643의 경우, 첫 번째 자릿수 합은 48이 되고, 다시 4+8=12, 그다음 1+2=3으로 줄어들어 최종 결과는 3이 됩니다.
출력
콘솔에 출력되는 결과는 다음과 같습니다.
3