void Func(int a) {
if (a == 0) {
return;
}
std::cout << a << std::endl;
Func(a - 1);
}
void Func(int a)
int a를 받는 함수 정의입니다.if (a == 0)
a가 0일 경우, 함수 실행을 종료합니다.return;
std::cout << a << std::endl;
a의 값을 출력합니다.Func(a - 1);
a 값을 1 감소시켜 재귀적으로 자신을 호출합니다.Func(3) 호출 시:a = 3: 3 출력 후, Func(2) 호출.a = 2: 2 출력 후, Func(1) 호출.a = 1: 1 출력 후, Func(0) 호출.a = 0: 조건문에 의해 실행 종료.3
2
1
int Factorial(int n) {
if (n <= 1) {
return 1;
}
return n * Factorial(n - 1);
}
int Factorial(int n)
n!을 계산하기 위한 함수입니다.n이 정수이며 반환값도 정수입니다.if (n <= 1)
n이 1 이하일 경우, 팩토리얼 계산을 종료하고 1을 반환합니다.return 1;
1! = 1, 0! = 1이므로 반환합니다.return n * Factorial(n - 1);
n에 대해 Factorial(n - 1)을 호출하고 그 결과를 곱합니다.n이 1이 될 때까지 재귀 호출이 이어집니다.Factorial(4) 호출 시:Factorial(4) → 4 * Factorial(3)Factorial(3) → 3 * Factorial(2)Factorial(2) → 2 * Factorial(1)Factorial(1) → 14! = 4 * 3 * 2 * 1 = 24int Gcd(int a, int b) {
if (b == 0) {
return a;
}
return Gcd(b, a % b);
}
int Gcd(int a, int b)
a와 b의 최대공약수(GCD)를 계산합니다.if (b == 0)
b가 0일 때, 현재 값 a가 최대공약수입니다.return a;
a를 반환합니다.return Gcd(b, a % b);
a % b를 통해 다음 재귀 호출을 수행합니다.b가 0이 될 때까지 반복됩니다.Gcd(48, 18) 호출 시:Gcd(48, 18) → Gcd(18, 12)Gcd(18, 12) → Gcd(12, 6)Gcd(12, 6) → Gcd(6, 0)Gcd(6, 0) → 종료 조건에 따라 6 반환.6종료 조건(Base Case) 누락:
스택 오버플로우:
성능 문제:
| 장점 | 단점 |
|---|---|
| 간결하고 이해하기 쉬운 코드 작성 가능 | 종료 조건 없으면 무한 루프 발생 |
| 복잡한 문제를 단순화 가능 | 스택 오버플로우로 프로그램 종료 위험 |
| 특정 알고리즘(DFS, A*)에 필수적 | 반복문보다 실행 속도가 느릴 수 있음 |