이번 글에서는 숫자를 입력받아 각 자릿수를 계속 더한 뒤, 결과가 한 자리 숫자가 될 때까지 이 과정을 재귀적으로 반복하는 자바스크립트 함수를 작성하는 방법을 알아보겠습니다.
예를 들어, 입력된 숫자가 다음과 같다면:
54563
최종 출력값은 5가 되어야 합니다. 그 이유는 다음과 같습니다:
= 5 + 4 + 5 + 6 + 3
= 23
= 2 + 3
= 5
이처럼 자릿수의 합이 두 자리 이상일 경우, 다시 그 숫자들의 합을 구하는 과정을 반복하여 최종적으로 한 자리 숫자(디지털 루트, Digital Root)를 얻는 것이 목표입니다.
구현 방법
함수는 크게 두 부분으로 나눌 수 있습니다. 먼저 입력값이 이미 한 자리 숫자라면 그대로 반환하고, 그렇지 않다면 각 자릿수의 합을 구한 후 그 결과를 인자로 하여 자기 자신을 다시 호출합니다.
코드 예시
const num = 54563;
const addRecursively = num => {
// 한 자리 숫자면 그대로 반환
if(num < 10){
return num;
};
let sum = 0;
// 각 자릿수의 합 계산
while(num !== 0) {
sum += (num % 10);
num = parseInt(num / 10);
};
// 합이 여전히 두 자리 이상이면 재귀 호출
return addRecursively(sum);
};
console.log(addRecursively(num));
동작 원리 설명
- 기저 조건(Base Case):
num < 10일 때, 즉 숫자가 이미 한 자리라면 해당 값을 그대로 반환하여 재귀를 종료합니다. - 자릿수 분리:
num % 10으로 마지막 자릿수를 추출하고,parseInt(num / 10)으로 마지막 자릿수를 제거한 나머지를 얻습니다. - 재귀 호출: 구해진 자릿수의 합을 새로운 인자로 전달하며 함수를 다시 호출합니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다:
5
입력값 54563의 자릿수를 모두 더하면 23이 되고, 다시 2 + 3을 계산하면 최종적으로 5라는 한 자리 숫자를 얻게 됩니다.