1. 재귀 함수의 장단점
1) 재귀 함수는 불려진 만큼 메모리를 할당받는다(소비한다).
2) 재귀 함수는 함수가 종료되지 않은채 계속 함수를 호출한다.
> 함수 내에 선포된 자동 변수들이 램에 새롭게 할당을 받는다.
3) 재귀 함수는 메모리를 많이 소비하여 처리속도가 느리다.
2. 재귀 함수의 예시 펙토리얼(!)
팩토리얼 n! = n*(n-1)!
#include<stdio.h> // Claculate factorial function
long factorial(int x)
{
if ( x == 1 )
return 1;
else return
x*factorial(x-1);
}
int main()
{
int n;
int c = 1;
printf(" input number : ");
c = scanf("%d",&n);
while( c == 1 )
{
printf(" %d! = %ld\n",n,factorial(n));
printf(" input number : ");
c = scanf("%d",&n);
}
}
3. 재귀 함수의 원리
다음의 소스를 보고 재귀 함수의 원르르 알아보자
#include<stdio.h>
void number(int x)
{
printf(" num up %d\n",x);
if ( x<3 ) number(x+1);
printf(" num down %d\n",x);
}
int main()
{
number(1);
return 0;
}
--------------------------- 결과
하지만 num down 1까지 함수는 진행된다.
어찌 된 일일까?
1.재귀 함수의 장단점에서의 설명의 2)현상이 일어난 것이다.
(2) 재귀 함수는 함수가 종료되지 않은채 계속 함수를 호출한다.)
즉, number(1)실행
number(2)실행
number(3)실행
number(3)종료
number(2)종료
number(1)종료
가 일어 난 것이다..
한마디로 말하자면 함수안에 함수가 실행 되므로 안의 함수가 끝나기전에는
바깥의 함수가 닫히지 않고, 안의 함수가 끝나면 바깥의 함수가 닫힌다는 것이다.