C언어 재귀함수 (Recursion)

코딩C언어
읽는데 6분 소요
처음 쓰여진 날: 2026-02-10
마지막 수정일: 2026-02-10
조회수: 8

요약

C언어 재귀함수의 개념과 동작 원리를 알아봅니다. 기저 조건, 함수 호출 체인, 팩토리얼 등 정보처리기사 실기에 출제되는 재귀 개념을 정리합니다.

키워드 체크

다음은 정보처리기사 실기에서 재귀함수와 관련하여 출제된 키워드입니다.

키워드의미출제 회차
if (a <= 1) return 1;기저 조건 (재귀 종료 조건)20년3회, 22년1회
fn(n - 1)재귀 호출 (자기 자신 호출)20년3회, 22년1회, 23년3회
fn(n - 1) + fn(n - 2)다중 재귀 호출23년3회

재귀함수 핵심 정리

개념설명예시
재귀함수함수가 자기 자신을 호출하는 함수fn(n-1)
기저 조건재귀 호출을 멈추는 조건if (n <= 1) return 1;
함수 호출 체인함수가 다른 함수를 호출하며 이어지는 구조r100() → r10() → r1()
호출 스택함수 호출 정보가 쌓이는 스택 메모리호출할 때 쌓이고, 반환할 때 제거

재귀함수란?

재귀함수(Recursive Function) 란 함수가 자기 자신을 다시 호출하는 함수입니다.

c
코드 하이라이팅 중...

위 코드에서 fn 함수 안에서 다시 fn(n - 1)을 호출합니다. 이것이 재귀입니다.


함수 호출 체인

재귀를 이해하기 전에, 먼저 함수가 다른 함수를 호출하는 구조를 알아보겠습니다.

c
코드 하이라이팅 중...

이 코드는 재귀는 아니지만, 함수가 함수를 호출하는 체인 구조입니다.

호출 순서 추적하기

함수 호출 체인은 안쪽 함수부터 계산해야 합니다. 바깥 함수는 안쪽 함수의 반환값을 기다리기 때문입니다.

text
코드 하이라이팅 중...
단계함수계산반환값
1r1()44
2r10()30 + r1() = 30 + 434
3r100()200 + r10() = 200 + 34234

출력: 234

함수 호출 체인
r100()이 r10()을 호출하고, r10()이 r1()을 호출합니다. 반환은 안쪽 함수부터 바깥쪽으로 돌아옵니다.


재귀함수의 동작 원리

함수 호출 체인에서 호출하는 함수가 자기 자신이면 재귀함수입니다.

팩토리얼 예제

팩토리얼(Factorial) 은 1부터 n까지의 모든 수를 곱한 값입니다. 5! = 5 x 4 x 3 x 2 x 1 = 120

c
코드 하이라이팅 중...

재귀 호출 추적하기

fn(5)를 호출하면 다음과 같이 동작합니다.

1단계: 호출이 쌓이는 과정 (기저 조건에 도달할 때까지)

text
코드 하이라이팅 중...

2단계: 반환값이 돌아오는 과정 (기저 조건에서부터 역순으로)

text
코드 하이라이팅 중...
호출계산반환값
fn(1)기저 조건 (a <= 1)1
fn(2)2 * fn(1) = 2 * 12
fn(3)3 * fn(2) = 3 * 26
fn(4)4 * fn(3) = 4 * 624
fn(5)5 * fn(4) = 5 * 24120

출력: 120

팩토리얼 재귀 호출 추적
왼쪽: fn(5)에서 fn(1)까지 호출이 쌓이는 과정. 오른쪽: 기저 조건에서부터 반환값이 돌아오는 과정.

실기 문제 풀이 전략

재귀함수 문제 풀이 순서

  1. 기저 조건 확인: if 문에서 어떤 값을 반환하는지 확인
  2. 재귀 호출 파악: return 문에서 자기 자신을 어떻게 호출하는지 확인
  3. 호출 트리 작성: 기저 조건에 도달할 때까지 호출을 펼치기
  4. 역순 계산: 기저 조건의 반환값부터 시작하여 위로 계산

복잡한 재귀: 두 번 이상 자기 자신을 호출하는 경우

재귀 호출이 두 번 이상 있는 경우, 각 호출의 반환값을 모두 계산해야 합니다.

다중 재귀 호출 트리
gamja(7)에서 시작하여 gamja(n-1)과 gamja(n-3) 두 갈래로 분기되는 트리 구조. 주황색 노드가 기저 조건(n<=1)입니다.
c
코드 하이라이팅 중...

이 함수는 gamja(n-1)gamja(n-3) 두 개의 재귀 호출을 합니다.

표로 정리하기

복잡한 재귀는 작은 값부터 표로 정리하면 실수를 줄일 수 있습니다.

n기저 조건?계산결과
-1O (n <= 1)return -1-1
0O (n <= 1)return 00
1O (n <= 1)return 11
2Xgamja(1) + gamja(-1) = 1 + (-1)0
3Xgamja(2) + gamja(0) = 0 + 00
4Xgamja(3) + gamja(1) = 0 + 11
5Xgamja(4) + gamja(2) = 1 + 01
6Xgamja(5) + gamja(3) = 1 + 01
7Xgamja(6) + gamja(4) = 1 + 12

gamja(7) 의 출력: 2


정보처리기사 실기 대비 문제