글
(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 |