정처기 감자정처기 감자
C언어함수

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

C언어 재귀함수 (Recursion)

코딩C언어
읽는데 7분 소요
처음 쓰인 날: 2026-02-10
마지막 수정일: 2026-03-21
조회수: —
선수학습(1개)
  • 함수의 기초

요약

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

재귀함수 핵심 정리

함수와 조건문을 먼저 알고 오면 이해가 쉽습니다. 아래는 이 페이지에서 배울 내용을 미리 정리한 표입니다.

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

재귀함수란?

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

c
코드 하이라이팅 중…

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

기저 조건이 없으면 무한 반복됩니다
재귀함수는 반드시 멈추는 조건(기저 조건)이 있어야 합니다. 기저 조건이 없으면 함수가 끝없이 자기 자신을 호출하다가 스택 오버플로우(Stack Overflow)가 발생합니다. 호출이 너무 많이 쌓여 메모리 공간이 부족해지면 프로그램이 강제 종료되는 현상입니다.

함수 호출 체인

재귀를 이해하기 전에, 먼저 함수가 다른 함수를 호출하는 구조를 알아보겠습니다. 함수에서 배운 것처럼, 함수는 다른 함수를 호출할 수 있습니다.

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)기저 조건 (n <= 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. 역순 계산: 기저 조건의 반환값부터 시작하여 위로 계산

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

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

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

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

n <= 1이면 n을 반환합니다
기저 조건에서 1이 아니라 n을 반환합니다. n이 0이면 0, n이 1이면 1, n이 -1이면 -1을 반환합니다. 기저 조건의 반환값을 꼼꼼히 확인하세요.

gamja(7) 호출 추적

gamja(7)부터 펼쳐 내려갑니다. 각 호출을 gamja(n-1) + gamja(n-3)으로 분해하고, 기저 조건(n <= 1)에 도달하면 멈춥니다.

text
코드 하이라이팅 중…

같은 값이 여러 번 등장하지만, 한 번만 계산하면 나머지는 같은 결과입니다.

거꾸로 계산

모든 호출이 기저 조건에 도달했으므로, 가장 작은 값부터 거꾸로 계산합니다.

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

gamja(7)의 출력: 2

복잡한 재귀 풀이 팁
재귀 호출이 두 번 이상인 문제는 호출부터 펼쳐 내려가다가 기저 조건에 도달하면 거꾸로 올라오세요. 실제 재귀의 흐름대로 따라가는 것이 실수를 줄이는 방법입니다.
재귀와 반복문은 서로 바꿀 수 있습니다
재귀로 풀 수 있는 문제는 반복문으로도 풀 수 있고, 그 반대도 마찬가지입니다. 시험에서 재귀 코드가 나오면 반복문으로 바꿔 생각해 보는 것도 좋은 풀이 전략입니다. 반복문이 익숙하지 않다면 반복문 페이지를 먼저 읽어보세요.

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

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
후수학습(1개)
  • C언어 이진 트리 (Binary Tree)

관련 글

(41개)
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
C언어41개
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
C언어 sizeof 연산자
C언어코딩C언어
2026-05-06-
C언어 이진 트리 (Binary Tree)
C언어코딩C언어
2026-04-24-
C언어 중첩 구조체와 포인터 접근
C언어코딩C언어
2026-04-24-
C언어 함수 포인터 (Function Pointer)
C언어코딩C언어
2026-04-24-
배열 C언어 코딩 감자시험
감자시험C언어배열감자시험
2026-03-28응시
C언어 왕감자 정보처리기사 실기 모의 시험
C언어C언어
2026-03-27응시
제어문/반복문 C언어 코딩 감자시험
감자시험C언어제어문반복문
2026-03-28응시
연산자 C언어 코딩 감자시험
감자시험C언어연산자감자시험
2026-03-28응시
포인터 C언어 코딩 감자시험
감자시험C언어포인터감자시험
2026-03-28응시
문자열 C언어 코딩 감자시험
감자시험C언어문자열감자시험
2026-03-28응시
구조체 C언어 코딩 감자시험
감자시험C언어구조체감자시험
2026-03-28응시
C언어 구조체 배열
C언어코딩C언어
2026-03-21-
C언어 구조체 포인터
C언어코딩C언어
2026-04-24-
C언어 함수 프로토타입
C언어코딩C언어
2026-03-21-
C언어 입력 함수 - scanf, getchar, gets
C언어코딩C언어
2026-03-21-
C언어 출력 함수 - putchar, printf, puts
C언어코딩C언어
2026-09-29-
C언어 문자열 포인터 (char *)
C언어코딩C언어
2026-03-21-
C언어 포인터 산술 (Pointer Arithmetic)
C언어코딩C언어
2026-03-21-
C언어 선택정렬 (Selection Sort)
C언어코딩C언어
2026-02-10-
C언어 스택 (Stack) - LIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 2차원 배열
C언어코딩C언어
2026-03-21-
C언어 원형 큐 (Circular Queue)
C언어코딩C언어
2026-03-21-
C언어 ctype.h 문자 판별 함수
C언어코딩C언어
2026-03-21-
C언어 자료형
C언어코딩C언어
2026-05-15-
C언어 이중 포인터 (Double Pointer)
C언어코딩C언어
2026-03-21-
C언어 동적 메모리 할당 (malloc, free)
C언어코딩C언어
2026-05-04-
C언어 헤더 파일과 #include
C언어코딩C언어
2026-03-21-
C언어 연결 리스트 (Linked List)
C언어코딩C언어
2026-05-06-
C언어 포인터 배열과 2차원 배열
C언어코딩C언어
2026-03-24-
C언어 포인터의 기초
C언어코딩C언어
2026-06-25-
C언어 큐 (Queue) - FIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 static 변수 - 값이 유지되는 변수
C언어코딩C언어
2026-03-21-
C언어 포인터를 이용한 문자열 복사
C언어코딩C언어
2026-07-09-
C언어 문자열 뒤집기 (포인터 활용)
C언어코딩C언어
2026-03-21-
C언어 구조체
C언어코딩C언어
2026-03-20-
C언어 삼항 연산자
C언어코딩C언어
2026-03-21-
C언어 typedef - 자료형에 새 이름 붙이기
C언어코딩C언어
2026-03-21-
전설의 완전수 문제 - C언어
C언어코딩C언어
2025-09-12-
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999