Application/기초

[기초] C++ 재귀함수 (Recursive Function) : 팩토리얼

devsalix 2024. 3. 20. 06:38
728x90

프로그래밍 세계에서 재귀 함수는 마치 마법과 같은 도구입니다.
처음 접하는 사람들에게는 이해하기 어렵고 신비로운 면이 있지만,
한 번 이해하고 나면 매우 강력한 도구로 활용할 수 있습니다.
이 글에서는 재귀 함수의 개념, 동작 방식, 그리고 활용 사례에 대해 알아보겠습니다.


 

재귀 함수란?

 

재귀 함수는 함수가 자기 자신을 호출하는 프로그래밍 기법입니다.
일반적으로 재귀 함수는 두 가지 요소로 구성됩니다: 기본 사례(base case)와 재귀 사례(recursive case).
기본 사례는 재귀 호출을 멈추게 하는 조건을 나타내며, 재귀 사례는 함수가 자기 자신을 호출하는 부분입니다.

 

재귀 함수의 동작 방식은?

 

재귀 함수가 호출되면, 컴퓨터는 현재의 함수 호출을 중단하고 새로운 함수 호출을 시작합니다.
이 과정에서 호출 스택(call stack)이라는 메모리 공간에 함수의 호출 정보를 저장합니다.
재귀 호출이 여러 번 일어날수록 호출 스택에는 계속해서 쌓이게 되며,
기본 사례가 만족될 때까지 재귀 호출이 반복됩니다.

 

재귀 함수를 사용하는 이유는?

 

재귀 함수는 반복적인 문제를 간결하게 해결할 수 있는 강력한 도구입니다.
특히 문제가 자연스럽게 재귀적인 구조를 가지고 있는 경우에 재귀 함수는 더욱 효율적이고 이해하기 쉬운 해결책을 제공할 수 있습니다.
또한 몇몇 알고리즘과 데이터 구조에서는 재귀 함수를 사용함으로써 코드를 더욱 간결하고 가독성 있게 작성할 수 있습니다.

 

재귀 함수의 주의점은?

 

재귀 함수를 사용할 때 주의해야 할 점은 무한 재귀(infinite recursion)에 빠지지 않도록 하는 것입니다.
이는 재귀 사례에서 기본 사례로 수렴하지 않는 경우에 발생할 수 있습니다.
따라서 적절한 기본 사례를 설정하여 무한 재귀를 방지해야 합니다.
또한, 재귀 함수는 반복문에 비해 일반적으로 더 많은 메모리를 사용하므로 메모리 사용량에 주의해야 합니다.

 

결론

 

재귀 함수는 프로그래밍에서 강력하고 유용한 도구입니다.
그러나 재귀 함수를 사용할 때에는 잘못된 재귀 호출에 주의하고,
적절한 기본 사례를 설정하여 무한 재귀를 방지해야 합니다.
잘 활용한다면 재귀 함수는 복잡한 문제를 간결하고 우아하게 해결할 수 있는 훌륭한 도구가 될 것입니다.

 

재귀함수 예제  : 팩토리얼

 

#include <iostream>

// 재귀 함수를 사용하여 팩토리얼을 계산하는 함수
unsigned long long factorial(int n) {
    // 기본 사례: n이 0이면 팩토리얼은 1
    if (n == 0)
        return 1;
    // 재귀 사례: n이 양수인 경우, n * (n-1)!을 반환
    else
        return n * factorial(n - 1);
}

int main() {
    int number;
    std::cout << "팩토리얼을 계산할 숫자를 입력하세요: ";
    std::cin >> number;

    // 재귀 함수를 호출하여 팩토리얼을 계산하고 출력합니다.
    unsigned long long result = factorial(number);
    std::cout << number << "의 팩토리얼은 " << result << "입니다." << std::endl;

    return 0;
}

 

 


제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀

 

 
728x90
반응형