문제 정의
하나의 숫자를 입력받아 해당 숫자부터 0까지 카운트다운하면서 결과를 출력하는 재귀(Recursion) 기반 JavaScript 함수를 작성해야 합니다. 단, for나 while 같은 반복문은 사용할 수 없으며 오직 재귀 호출만으로 구현해야 한다는 조건이 있습니다.
재귀의 동작 원리
재귀 함수는 자기 자신을 다시 호출하는 구조로 동작합니다. 아래 코드에서는 카운터가 0보다 큰 동안 계속 자신보다 1 작은 값으로 함수를 호출합니다. 가장 마지막에 호출된 함수(counter가 0인 시점)부터 호출 스택이 하나씩 풀리면서 각 단계의 counter 값이 콘솔에 출력되기 때문에, 최종적으로는 0부터 입력값까지 순서대로 출력되는 역 카운트 효과를 얻을 수 있습니다.
예제 코드
구현 코드는 다음과 같습니다.
const recursiveLoop = (counter) => {
// counter가 0보다 크면 먼저 더 작은 값으로 재귀 호출
if (counter > 0) {
recursiveLoop(counter - 1);
}
// 스택이 풀리면서 현재 counter 값을 출력
console.log(counter);
return counter;
};
recursiveLoop(5);
recursiveLoop(15);
recursiveLoop(25);실행 결과
콘솔에는 아래와 같이 각 호출별로 0부터 해당 숫자까지 순서대로 출력됩니다.
// recursiveLoop(5) 0 1 2 3 4 5 // recursiveLoop(15) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // recursiveLoop(25) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
정리
이처럼 재귀 호출을 활용하면 별도의 반복문 없이도 카운트 로직을 간결하게 구현할 수 있습니다. 다만 입력값이 매우 커지면 호출 스택이 깊어져 스택 오버플로(stack overflow)가 발생할 수 있으므로, 실무에서는 입력 범위를 고려해 사용하는 것이 좋습니다.