재귀는 자료구조, 알고리즘 등에서 매우 중요한 요소이다.
컴퓨터 과학에 있어서 재귀란, 자신을 정의할 때 자기 자신을 재참조하는 것을 뜻한다.
이를 프로그래밍에 적용하여 사용 되는 것이 재귀 함수이다.
위 사진은 재귀 함수를 설명할 때 빠지지 않는 유머 사진이다.
유머 라고는 해도, 막상 보면 재귀 함수에 대해 이해가 매우 잘된다.
이제 재귀 함수를 코드로 쉽게 정의 해보자면,
1 2 3 4 5 | void Recursive(void) { printf(“재귀함수 호출!\n”); Recursive(); // 자기 자신을 재호출한다. } | cs |
이와 같은 형태라고 할 수 있다.
코드를 보면, Recursive 함수 내에서 Recursive 함수 (자기 자신)을 재호출 하는 것을 알 수 있다.
이것이 재귀이다.
하지만 저 함수에는 재귀의 탈출 조건이 없어 무한으로 재호출 되는 치명적인 결함이 있다.
따라서 위 함수에 탈출 조건을 추가해 완성 시켜보면 아래와 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h> void Recursive(int num) { if (num <= 0) // 재귀의 탈출 조건 return; // 재귀의 탈출 printf(“재귀함수 호출! %d\n”, num); Recursive(num – 1); // 자기 자신을 재 호출한다. } int main(void) { Recursive(3); return 0; } | cs |
출력 결과 :
이와 같이 재귀 함수를 사용할 때에는, 꼭 탈출 조건을 고려하여 사용하자.