데이터

제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-19

Leah (리아) 2025. 11. 7. 01:48
반응형

 Chapter 02. 기초수학 문제풀이

 

피보나치수열, 팩토리얼, 군수열 (Python 반복문·재귀 심화)

 

주요 개념

이번 학습에서는 반복문과 재귀 구조의 차이를 이해하고,
수학적 규칙이 있는 수열을 Python 코드로 구현하는 실습을 진행했다.

다룬 주제는 다음 세 가지다.
1️⃣ 피보나치 수열 — 이전 두 항의 합으로 이루어진 수열
2️⃣ 팩토리얼 — 재귀 호출과 반복문의 차이 이해
3️⃣ 군수열 — 규칙적인 분수 형태의 합을 조건부로 계산


1. 피보나치 수열 (Fibonacci Sequence)

피보나치 수열은

1, 1, 2, 3, 5, 8, 13, 21, …

처럼 앞의 두 항을 더해 다음 항이 만들어지는 수열이다.
수학적 정의는 다음과 같다.

  • F₁ = 1, F₂ = 1
  • Fₙ = Fₙ₋₁ + Fₙ₋₂ (n ≥ 3)

코드 예시

inputN = int(input('n 입력: '))

valueN = 0
sumN = 0
valuePreN2 = 0
valuePreN1 = 0

n = 1
while n <= inputN:
    if n == 1 or n == 2:
        valueN = 1
        valuePreN2 = valuePreN1
        valuePreN1 = valueN
    else:
        valueN = valuePreN2 + valuePreN1
        valuePreN2 = valuePreN1
        valuePreN1 = valueN
    sumN += valueN
    n += 1

print(f'{inputN}번째 항의 값: {valueN}')
print(f'{inputN}번째 항까지의 합: {sumN}')

 

실행 결과

n 입력: 10  
10번째 항의 값: 55  
10번째 항까지의 합: 143

 

반복문을 이용한 접근이지만, 재귀 호출(def fib(n))로도 동일한 구조를 구현할 수 있다.


2. 팩토리얼 (Factorial)

팩토리얼 n! 은 1부터 n까지의 모든 자연수를 곱한 값이다.
예를 들어, 5! = 5 × 4 × 3 × 2 × 1 = 120

Python에서는 반복문과 재귀함수 두 가지 방식으로 구현할 수 있다.


반복문 버전

def facFun1(n):
    fac = 1
    for i in range(1, n + 1):
        fac *= i
    return fac

num = int(input('input number: '))
print(f'{num}! = {facFun1(num)}')

재귀함수 버전

 
def facFun2(n):
    if n == 1:
        return n
    return n * facFun2(n - 1)

num = int(input('input number: '))
print(f'{num}! = {facFun2(num)}')

 

실행 결과

 
input number: 6  
6! = 720  

input number: 7  
7! = 5040

 

반복문은 메모리 효율적,
재귀 함수는 논리적으로 간결하다는 차이가 있다.


3. 군수열 (Group Sequence)

군수열은 일정한 패턴을 가진 분수 형태의 수열이다.
예시 수열은 다음과 같다:

1/1, 1/2, 2/1, 1/3, 2/2, 3/1, 1/4, 2/3, 3/2, 4/1, …

이때 합이 처음으로 100을 초과하는 시점의 항과 그 항의 위치를 출력하는 것이 목표다.


코드 예시

 
flag = True
n = 1
nCnt = 1
sumN = 0
searchNC = 0
searchNP = 0

while flag:
    for i in range(1, n + 1):
        print(f'{i}/{n - i + 1}', end=' ')
        sumN += i / (n - i + 1)
        nCnt += 1
        if sumN > 100:
            searchNC = i
            searchNP = n - i + 1
            flag = False
            break
    print()
    n += 1

print(f'합이 100을 초과한 첫 항: {searchNC}/{searchNP}')

 

실행 결과 예시

 
합이 100을 초과한 첫 항: 2/9

 

반복문 안에서의 break 처리와 중첩 루프 제어는
조건 기반 시뮬레이션 로직의 핵심 연습 포인트였다.

 

 

* 이 글은 제로베이스 데이터사이언스 파트타임 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.


 

💡 생각 정리

이번 실습에서는 반복과 재귀, 누적합의 개념이 자연스럽게 이어졌다.

  • 피보나치는 이전 항의 상태 저장 로직
  • 팩토리얼은 함수형 사고와 재귀적 사고의 차이
  • 군수열은 조건식이 포함된 반복 제어 구조

세 과제를 통해 프로그래밍의 기초이자, 알고리즘 사고의 핵심인 “규칙의 반복적 적용”을 깊이 이해할 수 있었다.


🚀 적용점

 

  • 피보나치: 재귀 호출 / 메모이제이션 알고리즘 연습용
  • 팩토리얼: 재귀적 문제분할(DFS·백트래킹) 개념 이해에 적합
  • 군수열: 조건 누적 시뮬레이션 / 반복 제어 로직 설계 응용 가능

 

반응형