(6-3)Function

C/C언어 이론 2018. 10. 2. 21:46

재귀호출 (recursive call)

- 재귀함수


- 함수의 수행문 안에서 '자기 자신' 함수를 다시 호출하는 것 (재귀호출)

> 재귀호출을 하는 함수를 재귀함수라고 한다.

- 반복문과 유사한 성격


- 함수는 호출되면 '스택(stack)'이라는 메모리를 사용한다.

stack : First in, Last Out (FILO) -- 우물 형태 (한 쪽이 막혔다)

queue : First in, First Out (FIFO) -- 양쪽이 뚫렸다.


> 너무 많은 반복 호출은 오류가 발생한다.

(Stack Overflow 스택 메모리 초과)

> 메모리 공간을 반복 사용(추가/삭제)하기 때문에, 반복문보다 속도가 느리다.


- 그럼 왜??

> 반복문으로 구현했을 때 복잡한 코드가 간결해 질 수도 있다.

> 그치만, 재귀호출 자체가 비효율적이므로 확실한 이득이 있을때 사용을 '고려'한다.

>> 폴더 탐색 코드는 일반적으로 재귀호출


- 함수 호출 시 스택을 사용하는 이유??

> 수행이 끝나고 돌아와야할 위치를 기억!



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
 
void fn(int iNum);
 
void main()
{
    printf("main 시작\n");
    fn(3);
    printf("main 끝\n");
}
 
void fn(int iNum)
{
    printf("fn 시작, iNum = %d\n", iNum);
 
    if(iNum == 0)
    {
        printf("fn 끝, iNum = 0부터 쭉~~\n");
        return// 함수 종료
    }
 
    fn(iNum-1); // 재귀호출 : 호출을 그만할, 빠져나올 구멍이 필요하다!
 
    printf("fn 끝, iNum = %d\n", iNum);
}
cs



'C > C언어 이론' 카테고리의 다른 글

(7-2)Array  (0) 2018.10.03
(7-1)Array  (0) 2018.10.03
(6-2)Function  (0) 2018.10.02
(6-1)Function  (0) 2018.10.02
(5-7)Repetitive  (0) 2018.10.02

설정

트랙백

댓글