이번 글에서는 숫자를 인자로 받아 그 숫자 안에서 가장 큰 자릿수를 반환하는 재귀(recursion) 기반의 JavaScript 함수를 작성해 보겠습니다.
예를 들어, 입력값이 다음과 같다면 −
45654356
각 자릿수(4, 5, 6, 5, 4, 3, 5, 6) 중 가장 큰 값은 6이므로, 함수는 6을 반환해야 합니다.
접근 방식
재귀로 이 문제를 해결하는 핵심 아이디어는 다음과 같습니다.
- 숫자를 10으로 나눈 나머지(
% 10)를 이용해 마지막 자릿수를 구합니다. - 현재 자릿수와 지금까지 찾은 최대값(
greatest)을 비교하여 더 큰 값을 유지합니다. - 숫자를 10으로 나눈 몫(
Math.floor(num / 10))으로 재귀 호출을 반복합니다. - 숫자가 0이 되면 재귀를 종료하고 누적된 최대값을 반환합니다.
예제 코드
다음은 전체 코드입니다 −
const num = 45654356;
const greatestDigit = (num = 0, greatest = 0) => {
if(num){
const max = Math.max(num % 10, greatest);
return greatestDigit(Math.floor(num / 10), max);
};
return greatest;
};
console.log(greatestDigit(num));
코드 설명
- 기본 매개변수:
num과greatest의 기본값이 모두 0으로 설정되어 있어, 인자 없이 호출해도 안전하게 동작합니다. - 재귀 단계:
Math.max(num % 10, greatest)로 현재 자릿수와 기존 최대값 중 더 큰 것을 선택한 뒤, 남은 숫자로 함수를 다시 호출합니다. - 종료 조건:
num이 0이 되면 if문이 실행되지 않고greatest를 그대로 반환하며 재귀가 마무리됩니다.
출력
콘솔에 출력되는 결과는 다음과 같습니다 −
6