Page 137 고등학교 프로그래밍 교과서
P. 137
4 되부름 함수에 대해 알아보자
되부름 함수란 사용자 정의 함수 안에서 자기 자신을 다시 호출하는 함수를 말한
다. 되부름 함수는 재귀 호출(Recursive Call)이라고도 하는데, 이는 어떤 문제를 풀
때 큰 문제를 큰 문제와 동일한 규칙을 갖고 있는 반복되는 형태의 작은 문제로 만
드는 방식이다.
다음 프로그램에는 2개의 사용자 정의 함수가 있는데, 하나는 재귀 호출을 이용한
것이고 다른 하나는 반복문을 이용한 것으로 두 함수의 결과는 동일하다.
프로그램 실행 결과
01 #include
02 int factorial_r( int n ) 재귀 호출을 이용한 팩토리얼 계산 반복문 120
03 {
04 if ( n > 1) 재귀 조건
05 {
06 return ( n*factorial_r(n-1));
07 }
08 else
09 {
10 return 1; STOP 조건
11 }
12 }
13 int factorial_l( int n ) 반복문을 이용한 팩토리얼 계산
14 {
15 int i, p=1;
16 for ( i=1; i<=n; i++ ) Q & A
17 { 재귀 호출을 사용한 코드를 반복
18 p = p*i; 문으로도 표현할 수 있다면 두 방법
19 } 에는 어떤 차이가 있을까?
일반적으로 재귀 호출을 사용하
20 return p;
면 코드가 간결하고 명확해진다. 대
21 } 신 재귀 호출을 사용하면 함수를 여
22 int main( ) 러 번 반복하면서 호출하여 함수 호
23 { 출이 과도하게 많아지게 되어 CPU
에 부담이 되며 함수의 반복 호출에
24 int recursive, loop;
따른 실행 시간도 증가하게 된다.
25 recursive = factorial_r(5); 더불어 함수 내에서 함수를 호출하
26 loop = factorial_l(5); 면 현재 작업하던 내용을 스택이라
는 메모리 공간에 기억해야 하므로
27 printf("재귀 호출 %d\n", recursive );
기억 장소를 낭비하게 된다. 이때,
28 printf("반복문 %d\n", loop); 반복문을 사용하면 코드가 다소 복
29 return 0; 잡해 보이기는 하지만, CPU에 부하
30 } 를 적게 주고 처리 속도도 좀 더 빠
르다.
6. 함수 135
(책)2015프로그래밍-교과서3차심의본 본문.indb 135 2017-09-05 오후 4:16:29