본문 바로가기

c&c++

재귀함수의 개념

재귀함수란 함수 내에서 자기 자신을 다시 호출하는 함수를 의미한다.

 

재귀함수를 실행하는 중간에 자기 자신을 호출하게 되면, 자기 자신의 복사본을 만들어서

 

그 복사본을 실행하게 된다.

 

이 원리를 통해 완료되지 않은 함수를 다시 호출한다는 것이 가능해진다.

 

그런데 이렇게 계속 자기 자신을 호출하여 복사본을 깔게 되면 탈출은 어떻게 하는지가 문제가 된다.

 

#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