Python 제네레이터를 이용한 피보나치 수열(Fibonacci number)

앞서 배운 제네레이터를 사용해 피보나치 수열을 만드는 법을 알아보겠습니다.

피보나치 수열(Fibonacci Number)이란

A, B 가 있다면 다음 A는 B와 같고 B는 A+B의 합과 같게 됩니다.

123.PNG

예제로 알아보겠습니다.

def fibon(n):
a = 1
b = 1
 
for i in range(n):
 
yield a
t = a
a = b
b = t + b

a 와 b 가 1에서 시작해서 n 값까지 a 의 값을 구합니다.

그 과정의 루프 안에서 a 의 값을 구하면 a 값을 t 로 저장해둔후 a와 b 가 같고 b = t + b 와 같은식으로 피보나치 수열을 구합니다. 여기서 a 를 t값으로 저장해두지않으면 다른 결과를 얻을수있으니 주의합니다.

123.PNG

결과 화면입니다. fibon(10)펑션만 실행시 제네레이터 오브젝트를 생성하는것을 볼수있습니다.

1 ~ 10까지의 번호를 하나씩 출력하는 for 루프를 사용하면 원하는 피보나치 수열이 완성됩니다.

또다른 방법은 Tuple Unpacking 을 이용하는 방법입니다.

Pythonic 한 방법으로 방금전의 코드가 한줄로 요약되는데요. 다음과 같습니다.

def fibon(n):
a = 1
b = 1
 
for i in range(n):
 
yield a
a,b = b, a+b

처음보기엔 “이게뭐지” 할수도 있지만 간단히 a = b , b = a+b 를 한줄에 지정해놓은겁니다.

“a를 구하고 a = b, b = a+b”  말그대로 피보나치수열이므로 결과도 같습니다. 파이썬의 간결하고 강력함입니다.

123.PNG

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s