재귀함수란 함수 내에서 자기 자신을 다시 호출하는 함수를 의미한다.
재귀함수를 실행하는 중간에 자기 자신을 호출하게 되면, 자기 자신의 복사본을 만들어서
그 복사본을 실행하게 된다.
이 원리를 통해 완료되지 않은 함수를 다시 호출한다는 것이 가능해진다.
그런데 이렇게 계속 자기 자신을 호출하여 복사본을 깔게 되면 탈출은 어떻게 하는지가 문제가 된다.
#include <stdio.h>
void Recursive(int num)
{
if(num <= 0) // Recursive를 탈출하는 탈출구가 된다
return; // return은 값을 반환하고 함수를 종료시킨다
printf("Recursive call! %d \n", num);
Recursive(num-1); // 탈출구로 가는 길을 만들어 준다
}
int main(void)
{
Recursive(3);
return 0;
}
위와 같은 특징을 이용해서 팩토리얼 코드를 짜볼 것임.
#include<stdio.h>
int factorial(int n)
{
if(n == 0)
return 1;
else
return n * factorial(n-1);
}
int main(void)
{
printf("1! = %d \n", factorial(1));
printf("2! = %d \n", factorial(2));
printf("3! = %d \n", factorial(3));
printf("4! = %d \n", factorial(4));
printf("5! = %d \n", factorial(5));
return 0;
}
factorial 함수를 정의하는 부분을 처음 봤을 땐 이걸로 무슨 팩토리얼 계산이 되는 거지 라는 말이 나왔는데
손 계산을 해보니까 진짜 되는 걸 알았음.
컴파일 해서 실행 해보니까 진짜인 걸 보았음.
이 factorial 함수의 정의과정은 앞으로 재귀함수의 구현에 있어 매우 중요한 모델이 되므로
그 과정을 제대로 이해하는 것이 중요.
'c&c++' 카테고리의 다른 글
문자 / 문자열 (0) | 2021.10.03 |
---|---|
[도전! 프로그래밍 1] 문제7번 (0) | 2021.10.01 |
static 선언을 추가한 지역변수 (+register변수) (0) | 2021.09.30 |
전역변수 vs. 지역변수 (0) | 2021.09.30 |
break는 '반복문'을 탈출한다 (0) | 2021.09.26 |