일반 함수와는 조금 다른 자기 자신을 호출하는 재귀 함수에 대해서 알아보자.
함수 A가 다른 함수 B를 호출할수 있는데
함수 A는 자기 자신 A를 다시 호출할수도 있다.
이를 재귀 함수라 한다.
#include <stdio.h>
void func() {
func();
}
int main() {
func();
return 0;
}
위와 같은 재귀함수는 함수를 호출하는 순간 무한히 호출되는 구조이므로 스택오버플로우 에러가 발생한다.
따라서 재귀함수는 항상 종료 조건(=탈출 조건)을 명기해야 한다.
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;
}