* 재귀 함수
- 자기자신을 다시 호출하는 형태의 함수
- 알고리즘 등에 유용하게 이용
* 재귀 함수의 탈출 조건
- 무한 재귀 호출을 피하기 위해서 필요
- 자료구조와 알고리즘이 필요
* 재귀 함수 디자인 사례
- 팩토리얼(factorial) 계산을 위한 알고리즘
예) n! = n*[(n-1)*(n-2)*(n-3)....*2*1] -> n! = n* (n-1)!
f(n) = n이 1이상인 경우 : n*f(n-1);
n이 0인 경우 : 1
int f(int n)
{
if(n==0) rteturn1;
else return n*f(n-1);
}
예2)
Recursive함수에 스스로 호출하는 명령문이 있으므로 loop되어 계속 출력된다.
따라서 메모리는 가득차게되고(stack over flow) 자동으로 종료시킨다.
//탈출의 예시
void Recursive(int n)
{
printf("RecursiveRun! \n");
if(n == 1) return;
Recursive(n-1);
}
int f(int n)
{
if(n==0) return 1;
else return n*f(n-1);
}
int main(void)
{
int a=3;
int val;
int result;
//탈출 테스트
Recursive(a);
//팩토리얼 디자인
printf("정수 입력 :");
scanf("%d" , &val);
if( val<0 )
{
printf("please input 0 over number. \n");
return 1;
}
result =f(val); //factorial계산
printf("%d!의 계산 결과 : %d \n", val , result );
return 0;
}
참고) 프로세스를 이해하기 위해서는 "컴퓨터구조"와 "운영체제"를 익혀야 한다.