자바스크립트 재귀 함수의 작성과 활용

자바스크립트에서 재귀 함수는 함수가 자기 자신을 호출하는 것을 의미합니다. 이는 간단한 문제부터 복잡한 알고리즘까지 다양한 상황에서 사용될 수 있습니다. 이번 글에서는 자바스크립트에서 재귀 함수를 작성하고 활용하는 방법에 대해 알아보겠습니다.

재귀 함수의 작성

재귀 함수를 작성하는 것은 간단합니다. 다음은 자바스크립트에서 재귀 함수를 작성하는 기본적인 구조입니다.

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의 팩토리얼 값을 계산하여 반환하는 역할을 합니다. 재귀 호출은 입력 값인 nfactorial(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은 전위 순회를 구현한 재귀 함수입니다. 이 함수를 통해 이진 트리의 노드 값을 출력하려면 현재 노드의 값을 출력한 후 왼쪽 서브트리와 오른쪽 서브트리를 순회하게 됩니다.

결론

자바스크립트에서 재귀 함수는 다양한 상황에서 유용하게 사용될 수 있습니다. 기본적인 재귀 함수의 작성 방법과 팩토리얼 계산, 이진 트리 순회와 같은 실제 예제를 통해 재귀 함수의 활용을 학습했습니다. 재귀 함수를 잘 이해하고 활용한다면 복잡한 문제를 더 효율적으로 해결할 수 있을 것입니다.