자바스크립트에서 재귀 함수는 함수가 자기 자신을 호출하는 것을 의미합니다. 이는 간단한 문제부터 복잡한 알고리즘까지 다양한 상황에서 사용될 수 있습니다. 이번 글에서는 자바스크립트에서 재귀 함수를 작성하고 활용하는 방법에 대해 알아보겠습니다.
재귀 함수의 작성
재귀 함수를 작성하는 것은 간단합니다. 다음은 자바스크립트에서 재귀 함수를 작성하는 기본적인 구조입니다.
function recursiveFunction() {
// 기저 사례(base case)를 체크하고 필요한 로직을 구현합니다.
// 자기 자신을 호출하는 코드를 작성합니다.
recursiveFunction();
}
위의 코드에서 recursiveFunction
은 재귀 함수의 이름입니다. 함수 내부에는 기저 사례를 체크하고 필요한 로직을 구현하며, 함수 끝부분에서 자기 자신을 호출하게 됩니다.
재귀 함수의 활용
팩토리얼 계산하기
재귀 함수는 팩토리얼 계산과 같은 간단한 문제부터 시작할 수 있습니다. 이를 통해 재귀 함수의 작동 원리를 이해해 볼 수 있습니다.
function factorial(n) {
// 기저 사례: n이 0일 때 1을 반환합니다.
if (n === 0) {
return 1;
}
// 재귀 호출: n과 factorial(n-1)의 곱을 반환합니다.
return n * factorial(n - 1);
}
console.log(factorial(5)); // 5 * 4 * 3 * 2 * 1 = 120
위의 코드에서 factorial
은 재귀 함수로, 입력한 숫자 n
의 팩토리얼 값을 계산하여 반환하는 역할을 합니다. 재귀 호출은 입력 값인 n
과 factorial(n-1)
의 곱을 반환하는데, 이를 반복하여 계산하면 최종적으로 팩토리얼 값을 얻을 수 있습니다.
이진 트리 순회하기
재귀 함수는 이진 트리와 같은 데이터 구조를 순회하는데에도 유용하게 활용될 수 있습니다. 다음은 이진 트리를 전위 순회하는 재귀 함수의 예시입니다.
class Node {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
}
function preOrderTraversal(root) {
if (root !== null) {
// 현재 노드의 값을 출력합니다.
console.log(root.value);
// 왼쪽 서브트리를 순회합니다.
preOrderTraversal(root.left);
// 오른쪽 서브트리를 순회합니다.
preOrderTraversal(root.right);
}
}
// 이진 트리 생성
const root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
root.right.left = new Node(6);
root.right.right = new Node(7);
preOrderTraversal(root);
위의 코드에서 preOrderTraversal
은 전위 순회를 구현한 재귀 함수입니다. 이 함수를 통해 이진 트리의 노드 값을 출력하려면 현재 노드의 값을 출력한 후 왼쪽 서브트리와 오른쪽 서브트리를 순회하게 됩니다.
결론
자바스크립트에서 재귀 함수는 다양한 상황에서 유용하게 사용될 수 있습니다. 기본적인 재귀 함수의 작성 방법과 팩토리얼 계산, 이진 트리 순회와 같은 실제 예제를 통해 재귀 함수의 활용을 학습했습니다. 재귀 함수를 잘 이해하고 활용한다면 복잡한 문제를 더 효율적으로 해결할 수 있을 것입니다.