[코담]
웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트
미니프로젝트11 | ✅저자: 이유정(박사)
프로젝트 코드명: FlattenFibTree
프로젝트 유형: 재귀 기반 피보나치 트리 시뮬레이터 + 평탄화
🖥️ 프로젝트 개요
사용자가 입력한 수 n에 대해 피보나치 수열의 재귀 호출 구조를 트리로 시뮬레이션하고, 그 트리 구조를 담은 중첩 리스트를 반환한 뒤, 평탄화된 값의 합과 항목들을 출력합니다.
◽ 이 프로젝트를 통해 자연스럽게 적용되는 내용
재귀 함수
에서의 구조적 출력피보나치 수열
의 호출 트리 생성리스트 평탄화
및총합 계산
조기 리턴
,메모화 없이 순수 재귀 구현
📄 기능 요구사항 (Functional Requirements)
fib_tree(n)
함수: 피보나치 계산 구조를 중첩 리스트 형태로 생성flatten()
함수: 리스트를 평탄화하여 모든 수 추출- 평탄화된 항목 합계 및 항목 리스트 출력
📄 비기능 요구사항 (Non-Functional Requirements)
n <= 0
입력 시"0보다 큰 정수를 입력하세요."
출력- 중첩 구조 유지하며 피보나치 호출 흐름 그대로 표현
✅ 출력 포맷 구성:
피보나치 호출 구조: [1, [1, [1, 0]], [1, 0]]
평탄화 결과: [1, 1, 1, 0, 1, 0]
총합: 4
✅ 정답 코드:
def fib_tree(n):
if n <= 0:
return 0
if n == 1:
return 1
return [fib_tree(n - 1), fib_tree(n - 2)]
def flatten(data):
result = []
for item in data:
if isinstance(item, list):
result += flatten(item)
else:
result.append(item)
return result
n = 4
if n <= 0:
print("0보다 큰 정수를 입력하세요.")
else:
tree = fib_tree(n)
print("피보나치 호출 구조:", tree)
flat = flatten(tree)
print("평탄화 결과:", flat)
print("총합:", sum(flat))
🔍 코드 해설:
fib_tree(n)
은 숫자 대신 재귀 호출 트리를 그대로 리스트로 표현flatten()
은 재귀적으로 트리를 평탄화하여 숫자 목록 생성- 출력 결과는 재귀 호출의 구조와 총합을 동시에 확인 가능
- 재귀의 흐름을 시각화하고 데이터화하는 실무 기반 사고 훈련