[java] 스택을 이용한 재귀 알고리즘 구현하기

재귀 알고리즘은 함수가 자기 자신을 호출하는 방식으로 동작하는 알고리즘입니다. 이러한 알고리즘은 대부분 재귀 호출을 이용하여 구현됩니다. 하지만 재귀 호출은 함수 호출과 관련된 추가적인 메모리를 소비할 수 있으며, 스택 오버플로우와 같은 문제가 발생할 수 있습니다.

이러한 문제를 해결하기 위해 스택을 이용하여 재귀 알고리즘을 구현할 수 있습니다. 스택은 함수 호출 정보를 저장하고 복구하는 데에 사용됩니다. 자바에서는 java.util.Stack 클래스를 사용하여 스택을 구현할 수 있습니다.

다음은 스택을 이용하여 팩토리얼을 계산하는 재귀 알고리즘의 구현 예시입니다.

import java.util.Stack;

public class RecursiveAlgorithmWithStack {
    public static int factorial(int n) {
        Stack<Integer> stack = new Stack<>();
        stack.push(n);

        int result = 1;

        while (!stack.isEmpty()) {
            int num = stack.pop();
            
            if (num > 1) {
                stack.push(num - 1);
                result *= num;
            } else {
                result *= num;
            }
        }

        return result;
    }

    public static void main(String[] args) {
        System.out.println(factorial(5)); // 출력: 120
    }
}

위의 예시 코드에서는 팩토리얼을 계산하는 함수인 factorial을 구현하였습니다. 스택을 생성하고 첫 번째 값으로 n을 push합니다. 그 후, 스택이 비어있을 때까지 반복문을 실행합니다. 스택에서 값을 하나씩 꺼내며 다음의 조건에 따라 처리합니다.

위의 예시 코드를 실행하면 factorial(5)의 결과인 120이 출력됩니다.

스택을 이용한 재귀 알고리즘 구현은 재귀 호출에 비해 추가적인 메모리를 사용하지 않으며, 스택 오버플로우 문제도 회피할 수 있습니다. 이를 통해 더 효율적인 프로그램을 개발할 수 있습니다.

참고 문서: