C++에서는 main() 함수가 자기 자신을 호출할 수 있습니다. 함수가 자기 자신을 호출하는 것을 재귀(recursion)라고 부르며, 아래 프로그램은 이를 보여주는 간단한 예제입니다.
예제
#include<iostream>
using namespace std;
int main() {
static int x = 1;
cout << x << " ";
x++;
if(x == 11) {
return 0;
}
main();
}출력 결과
위 프로그램을 실행하면 다음과 같은 결과가 화면에 출력됩니다.
1 2 3 4 5 6 7 8 9 10
코드 동작 원리
이제 위 프로그램이 어떻게 동작하는지 단계별로 살펴보겠습니다.
1. 정적(static) 변수 사용: 변수 x는 main() 함수 내부에 선언된 정적 변수입니다. 일반 지역 변수라면 재귀 호출 시마다 새로 생성되어 값이 초기화되지만, 정적 변수는 프로그램 전체에서 딱 한 번만 초기화되고 그 값을 계속 유지합니다. 덕분에 재귀 호출 사이에 증가된 값이 보존됩니다.
2. 값 출력 및 증가: 현재 x의 값이 공백과 함께 출력된 뒤 1씩 증가합니다.
3. 종료 조건 검사: if 문은 프로그램이 무한히 자기 자신을 호출하지 않도록 종료 조건을 제공합니다. x의 값이 11이 되면 return 0;을 통해 프로그램이 정상적으로 종료됩니다.
4. 재귀 호출: 마지막 줄에서 main() 함수는 함수 호출 main();을 통해 자기 자신을 다시 호출합니다. 이 과정이 반복되면서 1부터 10까지 숫자가 차례대로 출력됩니다.
int main() {
static int x = 1;
cout << x << " ";
x++;
if(x == 11) {
return 0;
}
main();
}참고: 이처럼 main() 함수의 자기 호출은 재귀 개념을 이해하기 좋은 학습용 예제이지만, 실제 프로젝트에서는 스택 오버플로우 위험과 코드 가독성 저하 문제로 인해 권장되지 않습니다. 재귀 로직이 필요하다면 별도의 함수로 분리하여 작성하는 것이 좋은 습관입니다.