정보처리기사 실기 - 2022년 1회 C언어 기출 풀이(재귀 & 팩토리얼 문제)

Alchemist·2025년 9월 9일

정보처리기사

목록 보기
10/114

✨ 문제

다음 소스코드에서 입력값이 5가 들어왔을 때 출력되는 값을 쓰시오.

#include <stdio.h>
int func(int a) {
    if (a <= 1) return 1;
    return a * func(a - 1);
}
 
int main() {
    int a;
    scanf("%d", &a);
    printf("%d", func(a));
}

🎯 출제 의도

  • 재귀 함수의 동작 원리를 이해하는지 확인
  • 조건문을 통해 종료 조건(base case)을 설정하는 방식 확인
  • 팩토리얼 계산을 재귀적으로 구현할 수 있는지 확인
  • scanfprintf를 통한 입출력 방식 이해

📘 개념 정리

1. 재귀 함수(Recursion)

int func(int a) {
    if (a <= 1) return 1;
    return a * func(a - 1);
}
  • 함수가 자기 자신을 다시 호출하는 구조.
  • 반드시 종료 조건(base case)이 필요 → 여기서는 a <= 1일 때 1 반환.
  • 그 외의 경우에는 a * func(a-1)을 통해 계속 호출.

2. 팩토리얼(Factorial)

  • 수학적 정의:
    n!=n×(n1)×(n2)××1n! = n \times (n-1) \times (n-2) \times \cdots \times 1

  • 예: 5! = 5 × 4 × 3 × 2 × 1 = 120

3. scanf와 printf

scanf("%d", &a);
  • %d : 정수 입력 받기
  • &a : 변수 a의 주소에 값을 저장
printf("%d", func(a));
  • %d : 정수 출력
  • func(a)의 결과값 출력

📝 풀이 과정

입력값: 5
1. func(5) 실행

  • 5 * func(4)
  1. func(4) 실행
  • 4 * func(3)
  1. func(3) 실행
  • 3 * func(2)
  1. func(2) 실행
  • 2 * func(1)
  1. func(1) 실행
  • 조건 a <= 1 만족 → 1 반환

이제 거꾸로 올라가며 계산:

  • func(2) = 2 * 1 = 2
  • func(3) = 3 * 2 = 6
  • func(4) = 4 * 6 = 24
  • func(5) = 5 * 24 = 120

✅ 최종 출력 결과

120

💡 정리

이 문제에서 꼭 알아야 할 개념:

  • 재귀 함수는 자기 자신을 반복 호출하여 문제를 단계적으로 해결
  • base case(종료 조건)를 설정하지 않으면 무한 호출 발생
  • 팩토리얼 구현은 재귀 함수 대표 예제
  • scanf/printf: 표준 입력과 출력 함수
profile
html_programming_language

0개의 댓글