[C언어/C++] 재귀 (Recursion) 개념 및 구현

재귀는 자료구조, 알고리즘 등에서 매우 중요한 요소이다.

컴퓨터 과학에 있어서 재귀란, 자신을 정의할 때 자기 자신을 재참조하는 것을 뜻한다.

이를 프로그래밍에 적용하여 사용 되는 것이 재귀 함수이다.

재귀함수 유머

위 사진은 재귀 함수를 설명할 때 빠지지 않는 유머 사진이다.

유머 라고는 해도, 막상 보면 재귀 함수에 대해 이해가 매우 잘된다.

이제 재귀 함수를 코드로 쉽게 정의 해보자면,

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

출력 결과 :

이와 같이 재귀 함수를 사용할 때에는, 꼭 탈출 조건을 고려하여 사용하자.

관련글

in-coder 커뮤니티 HOT게시물

제목 작성자 작성일