SlideShare ist ein Scribd-Unternehmen logo
1 von 22
피보나치 수열과 파이썬
-2717 조현민-
목차
 주제탐구동기
 탐구 내용
 탐구 결과 및 느낀 점
 퀴즈(상품)
 주제탐구동기
 탐구 내용
 탐구 결과
 느낀 점
추상적 개념인 수열을 시각화 피보나치 수열에 대한 궁금증
프로그래밍을 통해
피보나치 수열을 시각화
 탐구 내용
 탐구 결과
 느낀 점
 파이썬 & 피보나치 수열 소개
 피보나치 수열을 구현하는 5가지 방법
 코드 작성 & 실행
파이썬 Python 소개
파이썬이란?
- 프로그래밍 언어
- 문법이 쉬움
- 1991년부터 배포
피보나치 수열이란?
 피보나치 수는 첫째 및 둘째 항이 1이며 그 뒤의 모든 항은
바로 앞 두 항의 합인 수열
 예)
 F(1) = 1
 F(2) = 1
 F(3) = F(2) + F(1) = 2
 F(4) = F(3) + F(2) = 3
 F(5) = F(4) + F(3) = 5
 …
피보나치 수열을 구현하는 5가지 방법
 1) 일반 함수 방식(Function)
 2) 재귀함수 방식(Recursive Function)
 3) 메모이제이션 구현 방식(Memoization)
 4) 파이썬 람다 함수 이용
 5) 행렬 연산(Matrix Operational)
재귀함수 VS 동적계획법(메모이제이션)
재귀함수 방식 메모이제이션(동적계획법)
 동일한 계산을 반복할 때,
 이전 계산 값을 메모리에 저장해서
 동일 반복 수행 제거
  프로그램 실행 속도 up
피보나치 수열에 적용한
재귀함수 VS 동적계획법(메모이제이션)
재귀함수 메모이제이션
 F(1) = F(2) = 1 가정한 뒤,
 F(3) 계산 & 저장
 F(4) 구하기 위해 F(3)을 재계산 X
 이미 저장된 F(3) 이용해 F(4)계산
F(10) 구하기 위해 f(8) 다시 계산
F(8) 구하기 위해 f(6) 다시 계산
F(6) 구하기 위해 f(4) 다시 계산
…(반복)…  매우 비효율적
 엄청 효율적임
재귀함수 원리 설명
F(2) F(2)
F(3) F(1)
F(4) F(3)
F(2) F(1)
F(5)
 t번째 값 F(t) = F(t - 1) + F(t - 2)
 F(1) = 1
 F(2) = 1 을 가정할 때,
**F(5)를 구하기 위해서는
4번의 계산과정이 필요함
재귀함수 원리 설명
F(2) F(2)
F(3) F(1)
F(4) F(3)
F(2) F(1)
F(5)
 t번째 값 F(t) = F(t - 1) + F(t - 2)
 F(1) = 1
 F(2) = 1 을 가정할 때,
**F(5)를 구하기 위해서는
4번의 계산과정이 필요함
F(5)를 얻기위해서는
재귀함수: 4번 연산
메모이제이션: 3번 연산
재귀함수방식
#코드 시작----------------------------------
def fibo(n):
if n == 1 or n == 2:
return 1
else:
return fibo(n - 1) + fibo(n - 2)
for n in range(1, 21):
print(n, fibo(n))
#코드 끝------------------------------------
피보나치 함수
정의
n = 1 또는 2 일때,
1 반환  F(1) = F(2) = 1
그렇지 않다면,
n번째 항에 n-1 번째항 + n-2 번째항 삽입
피보나치 수열 출력
만약,
메모이제이션 구현 방식(동적 계획법)
#코드 시작---------------------------------------
암기노트 = {1: 1, 2: 1}
def fibo(n):
if n in 암기노트:
return 암기노트[n]
else:
output = fibo(n - 1) + fibo(n - 2)
암기노트[n] = output
return output
for n in range(1, 21):
print(n, fibo(n))
#코드 끝----------------------------------------
피보나치 함수
정의
암기노트 정의
F(1) = F(2) = 1
피보나치 수열 출력
암기노트n번째에 n-1 번째항 + n-2 번째항
계산 & 저장
그렇지 않다면,
n값이 암기노트에 존재한다면
n번째 항 출력  F(1) = F(2) =1
만약,
재귀함수가 비효율적인 이유?
#코드 시작----------------------------------
counter = 0
def fibo(n):
global counter
counter += 1
if n == 1 or n == 2:
return 1
else:
return fibo(n - 1) + fibo(n - 2)
for n in range(1, 33):
print(n, '번째 항: ', fibo(n))
print('연산 횟수: ', counter, '번')
print(‘’)
#코드 끝----------------------------------------
연산 횟수만큼 숫자를
증가시키는 변수 생성
연산 횟수 출력
재귀함수방식 메모이제이션 방식
탐구 결과 및 느낀 점
 피보나치 수열처럼 같은 작업을 반복하는 경우에는 메모이제이션이 효율적인
방법임을 파이썬 구현을 통해 알게되었음
 수열의 n번째 항을 n값이 변함에 따라 시각적으로 확인할 수 있어서 수열관련
이해에 많은 도움이 되었음
퀴즈(3문항)
1번 문제
- 다음 중 동일 계산 반복에 효율적인 방식을 고르시오
1) 재귀함수 방식(Recursive Function)
2) 메모이제이션 구현 방식(Memoization)
정답: 2번
2번 문제
- 다음 중에서 가장 이질적인 한 가지를 고르시오
Dynamic
Programming 동적계획법
메모이제이션
動的計劃法
재귀함수
3번 문제
- 동적계획법이 아닌 일반 재귀함수 방식으로 피보나치 수열을 구할 때, F(6)을
구하기 위한 계산 횟수를 구하시오
 t번째 값 F(t) = F(t - 1) + F(t - 2)
 F(1) = 1
 F(2) = 1 을 가정할 때,
 **F(5)를 구하기 위해서는 4번의 계산과정이 필요함
F(2) F(2)
F(3) F(1)
F(4) F(3)
F(2) F(1)
F(5)
F(2) F(2)
F(3) F(1)
F(4) F(3)
F(2) F(1)
F(5)
F(2)
F(3)
F(4)
F(2) F(1)
F(6)
답: 7번
감사합니다

Weitere ähnliche Inhalte

Ähnlich wie 피보나치 수열과 파이썬.pptx

프리젠테이션-제목없음
프리젠테이션-제목없음프리젠테이션-제목없음
프리젠테이션-제목없음
suitzero
 
PS 향유회 세미나 - Python을 서브언어로 편하게 PS해보자
PS 향유회 세미나 - Python을 서브언어로 편하게 PS해보자PS 향유회 세미나 - Python을 서브언어로 편하게 PS해보자
PS 향유회 세미나 - Python을 서브언어로 편하게 PS해보자
SesangCho
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
SeongHyun Ahn
 

Ähnlich wie 피보나치 수열과 파이썬.pptx (11)

프리젠테이션-제목없음
프리젠테이션-제목없음프리젠테이션-제목없음
프리젠테이션-제목없음
 
Fp basic-kotlin
Fp basic-kotlinFp basic-kotlin
Fp basic-kotlin
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리
 
IPython
IPythonIPython
IPython
 
포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1
 
PS 향유회 세미나 - Python을 서브언어로 편하게 PS해보자
PS 향유회 세미나 - Python을 서브언어로 편하게 PS해보자PS 향유회 세미나 - Python을 서브언어로 편하게 PS해보자
PS 향유회 세미나 - Python을 서브언어로 편하게 PS해보자
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
 
Lecture 1: Introduction to Python and TensorFlow
Lecture 1: Introduction to Python and TensorFlowLecture 1: Introduction to Python and TensorFlow
Lecture 1: Introduction to Python and TensorFlow
 
모두의 JIT 컴파일러
모두의 JIT 컴파일러모두의 JIT 컴파일러
모두의 JIT 컴파일러
 
[D2CAMPUS] Algorithm tips - ALGOS
[D2CAMPUS] Algorithm tips - ALGOS[D2CAMPUS] Algorithm tips - ALGOS
[D2CAMPUS] Algorithm tips - ALGOS
 

피보나치 수열과 파이썬.pptx

  • 2. 목차  주제탐구동기  탐구 내용  탐구 결과 및 느낀 점  퀴즈(상품)
  • 3.  주제탐구동기  탐구 내용  탐구 결과  느낀 점 추상적 개념인 수열을 시각화 피보나치 수열에 대한 궁금증 프로그래밍을 통해 피보나치 수열을 시각화
  • 4.  탐구 내용  탐구 결과  느낀 점  파이썬 & 피보나치 수열 소개  피보나치 수열을 구현하는 5가지 방법  코드 작성 & 실행
  • 5. 파이썬 Python 소개 파이썬이란? - 프로그래밍 언어 - 문법이 쉬움 - 1991년부터 배포
  • 6. 피보나치 수열이란?  피보나치 수는 첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열  예)  F(1) = 1  F(2) = 1  F(3) = F(2) + F(1) = 2  F(4) = F(3) + F(2) = 3  F(5) = F(4) + F(3) = 5  …
  • 7. 피보나치 수열을 구현하는 5가지 방법  1) 일반 함수 방식(Function)  2) 재귀함수 방식(Recursive Function)  3) 메모이제이션 구현 방식(Memoization)  4) 파이썬 람다 함수 이용  5) 행렬 연산(Matrix Operational)
  • 8. 재귀함수 VS 동적계획법(메모이제이션) 재귀함수 방식 메모이제이션(동적계획법)  동일한 계산을 반복할 때,  이전 계산 값을 메모리에 저장해서  동일 반복 수행 제거   프로그램 실행 속도 up
  • 9. 피보나치 수열에 적용한 재귀함수 VS 동적계획법(메모이제이션) 재귀함수 메모이제이션  F(1) = F(2) = 1 가정한 뒤,  F(3) 계산 & 저장  F(4) 구하기 위해 F(3)을 재계산 X  이미 저장된 F(3) 이용해 F(4)계산 F(10) 구하기 위해 f(8) 다시 계산 F(8) 구하기 위해 f(6) 다시 계산 F(6) 구하기 위해 f(4) 다시 계산 …(반복)…  매우 비효율적  엄청 효율적임
  • 10. 재귀함수 원리 설명 F(2) F(2) F(3) F(1) F(4) F(3) F(2) F(1) F(5)  t번째 값 F(t) = F(t - 1) + F(t - 2)  F(1) = 1  F(2) = 1 을 가정할 때, **F(5)를 구하기 위해서는 4번의 계산과정이 필요함
  • 11. 재귀함수 원리 설명 F(2) F(2) F(3) F(1) F(4) F(3) F(2) F(1) F(5)  t번째 값 F(t) = F(t - 1) + F(t - 2)  F(1) = 1  F(2) = 1 을 가정할 때, **F(5)를 구하기 위해서는 4번의 계산과정이 필요함 F(5)를 얻기위해서는 재귀함수: 4번 연산 메모이제이션: 3번 연산
  • 12. 재귀함수방식 #코드 시작---------------------------------- def fibo(n): if n == 1 or n == 2: return 1 else: return fibo(n - 1) + fibo(n - 2) for n in range(1, 21): print(n, fibo(n)) #코드 끝------------------------------------ 피보나치 함수 정의 n = 1 또는 2 일때, 1 반환  F(1) = F(2) = 1 그렇지 않다면, n번째 항에 n-1 번째항 + n-2 번째항 삽입 피보나치 수열 출력 만약,
  • 13. 메모이제이션 구현 방식(동적 계획법) #코드 시작--------------------------------------- 암기노트 = {1: 1, 2: 1} def fibo(n): if n in 암기노트: return 암기노트[n] else: output = fibo(n - 1) + fibo(n - 2) 암기노트[n] = output return output for n in range(1, 21): print(n, fibo(n)) #코드 끝---------------------------------------- 피보나치 함수 정의 암기노트 정의 F(1) = F(2) = 1 피보나치 수열 출력 암기노트n번째에 n-1 번째항 + n-2 번째항 계산 & 저장 그렇지 않다면, n값이 암기노트에 존재한다면 n번째 항 출력  F(1) = F(2) =1 만약,
  • 14. 재귀함수가 비효율적인 이유? #코드 시작---------------------------------- counter = 0 def fibo(n): global counter counter += 1 if n == 1 or n == 2: return 1 else: return fibo(n - 1) + fibo(n - 2) for n in range(1, 33): print(n, '번째 항: ', fibo(n)) print('연산 횟수: ', counter, '번') print(‘’) #코드 끝---------------------------------------- 연산 횟수만큼 숫자를 증가시키는 변수 생성 연산 횟수 출력
  • 16. 탐구 결과 및 느낀 점  피보나치 수열처럼 같은 작업을 반복하는 경우에는 메모이제이션이 효율적인 방법임을 파이썬 구현을 통해 알게되었음  수열의 n번째 항을 n값이 변함에 따라 시각적으로 확인할 수 있어서 수열관련 이해에 많은 도움이 되었음
  • 18. 1번 문제 - 다음 중 동일 계산 반복에 효율적인 방식을 고르시오 1) 재귀함수 방식(Recursive Function) 2) 메모이제이션 구현 방식(Memoization) 정답: 2번
  • 19. 2번 문제 - 다음 중에서 가장 이질적인 한 가지를 고르시오 Dynamic Programming 동적계획법 메모이제이션 動的計劃法 재귀함수
  • 20. 3번 문제 - 동적계획법이 아닌 일반 재귀함수 방식으로 피보나치 수열을 구할 때, F(6)을 구하기 위한 계산 횟수를 구하시오  t번째 값 F(t) = F(t - 1) + F(t - 2)  F(1) = 1  F(2) = 1 을 가정할 때,  **F(5)를 구하기 위해서는 4번의 계산과정이 필요함 F(2) F(2) F(3) F(1) F(4) F(3) F(2) F(1) F(5)
  • 21. F(2) F(2) F(3) F(1) F(4) F(3) F(2) F(1) F(5) F(2) F(3) F(4) F(2) F(1) F(6) 답: 7번