재귀호출 Recursive call 팩토리알 (Factorial)

Posted by 꿈디렉터
2018.09.18 20:33 Computer Science/자료구조

재귀호출 Recursive call 


함수(또는 메소드)가 자기자신을 직접 또는 간접적으로 호출하는것을 재귀호출이라고 합니다.

보통 함수안에 서 사용하는 변수를 지역변수라고 하죠.

이때 함수로의 인수전달은 value에 의한 호출이라고 하며 이것을 콜바이 벨류(Call by Value) 라고 부릅니다.

재귀 호출을 사용할땐 꼭 종료조건을 넣어주어야해요. (스택오버플로우 주의)


재귀호출 장점

- 프로그램이 보다 보기쉽고 코드가 훨씬 간결하여 오류 수정이 용이합니다.


재귀호출 단점

- 코드가 이해하기 어렵고 공간메모리를 많이 요구합니다.




재귀 호출을 할 시 스택의 변화 입니다.

호출을 할때마다 스택이 계속 n-1개로 쌓여갑니다.

그렇기때문에 공간메모리 요구가 많아지고, 종료버튼이 없을경우

스택오버플로우가 생기는 것입니다.



#include 
void Output(int);

int main(void)
{
	Output(1);
	return 0;
}

void Output(int n)
{
	printf("level %d\n", n);
	if(n<4){
		Output(n+1);
	}
	printf("LEVEL %d\n",n);
{



위의 코드를 실행하면 아래와 같은 결과가 나옵니다.

처음에 누적될땐 위에가 계속 실행, 그후 종료를 만나면서

순차적으로 다시 돌아오는것을 확인할 수가 있습니다.



재귀호출 예제 대표명사 팩토리알


#include 

int Factorial(int n);

int main(void)
{
int num;
printf("임의의 정수 입력:");
scanf("%d", &num);

printf("Factorial %d : %d \n", num, Factorifal(num));
}

int Factorial(int n)
{
	if (n==0)
		return 1;
	return n*Factorial(n-1);
}



위처럼 FOR문이나 while문을 사용을 하면 복잡하게 소스를 여러뻔 써야할것들이

재귀호출을 사용하면 더욱 간단하게 출력이 되는것을 확인 할 수가 있습니다.


이 댓글을 비밀 댓글로