#1 재귀 함수는 어케 생겼을까
여기 재귀 함수 하나가 있다.
void Recursive(void)
{
printf("Recursive call\n");
Recursive(); //자기 자신 호출
}
완료 되지 않은 함수를 다시 호출하는 것은
사실 함수가 호출될 때 마다 해당 함수의 복사본을 더 만들어 실행하는 구조이다.
함수를 구성하는 명령문은 CPU로 이동(복사)되어 실행 된다.
따라서 위 Recursive() 함수는 중간쯤에 있는 명령문을 실행하는 도중에
다시 Recursive() 함수의 명령문을 CPU 로 이동(복사)시키는 건 문제가 되지 않는다.
이것이 재귀적인 형태의 함수이다.
물론 계속 호출하면 무한 루프가 될 수 있기에 탈출 조건 만들면된다.
#2 재귀함수의 디자인 사례
그렇다면 재귀함수는 앞으로 문제를 해결할 때 어떻게 사용을 할까?
재귀함수의 특징을 보기 위해 팩토리얼(Factorial)값을 반환하는 함수를 만들어 보자
우선 팩토리얼의 수학적 의미는 다음과 같다
n! = n x (n - 1) x (n - 2) x (n - 3) x ······· x 2 x 1
정수 n의 팩토리얼은 n!으로 표시하고, 마지막은 0! 이므로 1까지 곱하게 된다.
이러한 팩토리얼의 재귀적 특성을 이용해 재귀 함수로 구현해보자
#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("9! = %d \n", Factorial(9));
return 0;
}
실행해보면 각각의 팩토리얼값을 잘 나타낸다.
'그냥 개발글 > 자료구조 이론' 카테고리의 다른 글
2-3 재귀의 활용 - 하노이 타워 (0) | 2023.01.07 |
---|---|
2-2 재귀함수의 활용 (0) | 2023.01.07 |
1-4 빅-오 표기법 (Big-Oh Notation) (0) | 2023.01.03 |
1-3 순차 탐색 알고리즘과 이진 탐색 알고리즘 (0) | 2022.08.05 |