✅ 목표 (Goal)

일반 함수와는 조금 다른 자기 자신을 호출하는 재귀 함수에 대해서 알아보자.

✅ 재귀 함수란?

함수 A가 다른 함수 B를 호출할수 있는데

함수 A는 자기 자신 A를 다시 호출할수도 있다.

이를 재귀 함수라 한다.

#include <stdio.h>

void func() {
	func();
}

int main() {
	func();
    return 0;
}

위와 같은 재귀함수는 함수를 호출하는 순간 무한히 호출되는 구조이므로 스택오버플로우 에러가 발생한다.

따라서 재귀함수는 항상 종료 조건(=탈출 조건)을 명기해야 한다.

✅ 대표적인 재귀 함수의 예 #1: 팩토리얼 계산

n!=n×(n−1)!로 정의된다. 기본 조건은 n=0 or n=1일때 1이다.

#include <iostream>

int factorial(int n) {
    int result = 0;
    if (n <= 1) { return 1; } // 기본 조건
    result = n * factorial(n - 1); // 재귀 호출
    return result; // 재귀 호출
}

int main() {
    int a = 10;
    std::cout << a << "! is " << factorial(a) << std::endl;
    return 0;
}