JavaScript 재귀 함수 완벽 가이드
늑대의 코딩 스토리가 알려주는 재귀 함수 사용법과 실전 예시
재귀 함수란? 늑대의 코딩 스토리 설명
JavaScript 재귀 함수는 함수가 자신을 호출하여 문제를 해결하는 강력한 프로그래밍 기법입니다. 늑대의 코딩 스토리는 이를 초보자도 이해하기 쉽게 설명합니다. 재귀 함수는 반복문과 유사하지만, 문제를 더 작은 하위 문제로 나누어 해결합니다. 예를 들어, 팩토리얼 계산이나 트리 구조 탐색에 유용합니다. 핵심은 종료 조건(베이스 케이스)
을 설정하여 무한 루프를 방지하는 것입니다.
늑대의 코딩 스토리가 강조하는 재귀 함수의 두 가지 요소:
- 베이스 케이스: 재귀 호출을 멈추고 값을 반환하는 조건
- 재귀 케이스: 함수가 자신을 호출하며 문제를 작게 나누는 로직
JavaScript 재귀 함수 사용 방법
늑대의 코딩 스토리가 알려주는 재귀 함수 작성 단계는 다음과 같습니다:
- 문제를 재귀적으로 해결할 수 있는지 분석
- 베이스 케이스 정의 (예:
n = 1
일 때 반환) - 재귀 케이스 작성 (예:
factorial(n) = n * factorial(n-1)
) - 작은 입력값으로 테스트하여 검증
- 스택 오버플로우 방지를 위해 최적화 고려
재귀 함수 예시: 늑대의 코딩 스토리 실전 코드
1. 팩토리얼 계산
팩토리얼은 JavaScript 재귀 함수의 대표적인 예제입니다. 늑대의 코딩 스토리가 제공하는 아래 코드를 보세요:
function factorial(num) {
if (num < 1) return 1; // 베이스 케이스
return num * factorial(num - 1); // 재귀 케이스
}
console.log(factorial(5)); // 120 출력
위 코드는 5!
(5 팩토리얼)을 계산하여 120을 반환합니다. 늑대의 코딩 스토리는 이처럼 간단한 예제로 재귀의 원리를 이해할 수 있도록 돕습니다.
2. 숫자 합계 계산
1부터 n
까지의 합을 재귀적으로 계산하는 방법입니다:
function sumTo(n) {
if (n == 1) return 1; // 베이스 케이스
return n + sumTo(n - 1); // 재귀 케이스
}
console.log(sumTo(5)); // 15 출력 (1 + 2 + 3 + 4 + 5)
3. 중첩 구조 탐색
늑대의 코딩 스토리가 제공하는 중첩된 부서 구조에서 총 급여를 계산하는 예시:
let company = {
sales: [{ name: 'John', salary: 1000 }, { name: 'Alice', salary: 1600 }],
development: {
sites: [{ name: 'Peter', salary: 2000 }, { name: 'Alex', salary: 1800 }],
internals: [{ name: 'Jack', salary: 1300 }]
}
};
function sumSalaries(department) {
if (Array.isArray(department)) {
return department.reduce((prev, current) => prev + current.salary, 0);
} else {
let sum = 0;
for (let subdep of Object.values(department)) {
sum += sumSalaries(subdep);
}
return sum;
}
}
console.log(sumSalaries(company)); // 7700 출력
재귀 함수의 장단점
늑대의 코딩 스토리가 정리한 재귀 함수의 장단점:
장점 | 단점 |
---|---|
코드가 간결하고 직관적 | 메모리 소모가 큼 |
트리 구조 탐색에 적합 | 스택 오버플로우 위험 |
유지보수 용이 | 반복문보다 느릴 수 있음 |
재귀 함수 주의사항 | 늑대의 코딩 스토리 팁
늑대의 코딩 스토리가 강조하는 재귀 함수 사용 시 주의사항:
- 스택 오버플로우: 깊은 재귀는 호출 스택 초과로 오류를 일으킬 수 있습니다.
- 테일 콜 최적화: JavaScript 엔진에 따라 지원 여부가 달라 신뢰하지 마세요.
- 반복문 대안: 간단한 문제는 반복문이 더 효율적일 수 있습니다.
언제 재귀를 사용해야 할까?
늑대의 코딩 스토리가 추천하는 재귀 사용 사례:
- 트리나 그래프 구조 탐색 (예: DOM 트리 순회)
- 분할 정복 알고리즘 (예: 퀵소트, 병합 정렬)
- 재귀적 정의 문제 (예: 팩토리얼, 피보나치)
늑대의 코딩 스토리 결론
JavaScript 재귀 함수는 문제를 계층적으로 해결하는 강력한 도구입니다. 늑대의 코딩 스토리는 베이스 케이스와 재귀 케이스를 명확히 정의하고, 메모리 사용과 스택 오버플로우에 주의할 것을 권장합니다. 간단한 문제는 반복문이 더 효율적일 수 있으니 상황에 맞게 선택하세요. 더 많은 코딩 팁은 늑대의 코딩 스토리 블로그에서 확인하세요!
댓글 없음:
댓글 쓰기