상세 컨텐츠

본문 제목

피보나치(Fibonacci) 수열 구현 7가지 방법 - 파이썬 실습/확인 바로하기

카테고리 없음

by IT/머신러닝 엔지니어의 독서/경제/육아 공부 리치윈드 - windFlex 2020. 12. 16. 07:32

본문

반응형

이전 포스팅에서 피보나치 수열에 대하여 알아 보고, 구현하는 7가지 방법에 대하여 소개 드렸습니다. 

- 이전 포스팅 :

2018/03/03 - [개발 이야기/Python] - 피보나치(Fibonacci) 수열을 구현하는 7가지 방법 - 파이썬(Python) 피보나치 구현 7선

 

코드도 함께 소개해 드렸습니다만, 눈으로만 쓱 보는 단기기억은 쉽게 잊기 마련이죠.

 

실제로 실행해 보고 테스트를 해 봐야 장기기억으로 전환 됩니다. ^^ㅎㅎㅎ

 

자.. 이제 아래에서,  각 방법에 대하여 실습 및 확인을 해 보도록 하시겠습니다. 

순서는 아래와 같습니다. 

    1) 일반 함수 구현

    2) 재귀 함수 구현

    3) 제네레이터 (Generator) 방식

    4) 메모이제이션 (Memoizatioin) 방식

    5) 파이썬 한줄 코딩 (Single Line) 1

    6) 파이썬 한줄 코딩 (Single Line) 2

    7) 파이썬 행렬 연산 (Numpy) 

 


 

 

방법 1. 일반 함수 사용 방식 (Function)

함수 사용 방식 입니다. 

정말 단순하게 함수 하나 만들어서, 초기값 세팅하고, 반복하면서 (바로 이전값) + (전전 값)을 더하는 방법입니다. 

피보나치 수열의 정의를 그 대로 구현한 직관적인 방법이라 하겠습니다. 

This is an python exercise with a plot

import numpy as np import pandas as pd a = 10 def fib(n): a,b = 1,1 if n==1 or n==2: return 1 for i in range(1,n): a,b = b, a+b return a fib(5)
Use the assignment operator (<-) to create the variable a.

 

 

방법2. 재귀함수 사용 방식 (Recursive Function)

두번째 소개 드렸던 방법으로 재귀함수 사용 방법입니다. 

자기가 자기자신을 다시 호출하는 방법이지요. 다들 아시겠지만, 재귀함수에서 가장 중요한 것은 종료하는 방법입니다. 그렇지 않으면 무한 루프에 빠지게 될꺼니깐요.

This is an python exercise with a plot

import numpy as np import pandas as pd a = 10 def fib(n): if n==1 or n==2: return 1 else: return fib(n-1) + fib(n-2) fib(5)
Use the assignment operator (<-) to create the variable a.

위의 재귀함수는 숫자를 줄여나가면서 자기자신을 호출하다가, 수가 2 또는 2이하가 되면 초기값을 반환하고 종료 합니다. 

 

방법 3. 제네레이터 구현 방식 (Generator method)

제너레이터 구현 방식입니다. 

방법1. 단순 함수와 동일한 로직입니다만, 제너레이터로 구현되어 있습니다. 

This is an python exercise with a plot

import numpy as np import pandas as pd a = 10 def fibs(): a,b = 0,1 while True: a,b = b, a+b yield a f = fibs() next(f)
Use the assignment operator (<-) to create the variable a.

 

 

방법 4. 메모이제이션 구현 방법 (Memoization Method)

메모이제이션 방법입니다. 로직은 동일합니다. 

다만, 메모이제이션 방법을 사용하기 때문에, 과거의 정보를 기억하고 있다가 사용하지요.

This is an python exercise with a plot

import numpy as np import pandas as pd a = 10 def fib(n): fibList=[1, 1] if n==1 or n==2: return 1 for i in range(2,n): fibList.append( fibList[i-1] + fibList[i-2] ) return fibList fib(5)
Use the assignment operator (<-) to create the variable a.

 

 

방법 5. 파이썬 람다를 사용한 한줄 코딩 1 (Single Line Code with lambda)

 

람다 함수를 사용하면, 코드가 간결해 집니다. 1줄 코딩이 가능해 집니다.

This is an python exercise with a plot

import numpy as np import pandas as pd a = 10 fib = lambda n: 1 if n<=2 else fib(n-1) + fib(n-2) fib(5)
Use the assignment operator (<-) to create the variable a.

 

 

 

방법 6. 파이썬 람다를 사용한 한줄 코딩 2 (Single Line Code with lambda)

람다 함수를 사용하는 또다른 예제입니다.

This is an python exercise with a plot

import numpy as np import pandas as pd a = 10 fib = lambda n, a=0, b=1 : a if n<=0 else fib(n-1,b, a+b) fib(5)
Use the assignment operator (<-) to create the variable a.

 

 

방법 7. 행렬 연산 (Matrix Operational method) 구현 방식

행렬 연산입니다. 

선형대수학을 사용하는 방식입니다. 일반 루프문을 사용하여 코딩하는 방식에서, 선형대수를 사용하는 코딩으로 생각을 좀 바꾸어야 합니다. 

굳이 방법 7을 추가해 둔것은, 데이터분석과 인공지능에서 선형대수 방법으로 구현을 하기 때문입니다. 

처음에는 어렵지만, 자주 사용하면 코딩하는 방법에 익숙해 지실 겁니다. 

과거 Matlab을 사용하신 분들은 이 방법에 익숙하실 겁니다. ^^

This is an python exercise with a plot

import numpy as np import pandas as pd a = 10 A = np.matrix( [ [1,1], [1,0] ] ) (A**5)[0,1]
Use the assignment operator (<-) to create the variable a.

도움이 되었다면, 좋아요와 구독 부탁 드립니다.

 

 

 

관련글

반응형

댓글 영역