파이썬 - 피보나치수열

쥬쥬·2022년 4월 3일
0

파이썬 기본문서를 보던 중 (3.2 프로그래밍으로의 첫걸음)

#피보나치수열
a,b=0,1      
while a<10:
    print(a)
    a,b=b,a+b

위 구문과 같은 결과가 나올 줄 알았던 다음 구문

a=0
b=1
while a<10:
    print(a)
    a=b
    b=a+b

최종 결과는 8이 나오는건 동일했지만 while문 마지막에 print(a,b,a+b)를 적으면
단계별로 서로 다른 a,b 값이 나온다.
무엇보다 두번째 구문은 피보나치 수열도 아니다.

찾아보니 위 구문의 a, b = b, a+b 는 swap라는 것이었으며
서로 자리를 바꿔치기하는 방법인 것 같다.
그렇다면 이 방법을 사용하지 않고 기본적으로 한 줄씩 작성하면서 피보나치 수열을 while문으로
작성하는 방법은 무엇일까?

a=0
b=1
while a<10:
    print(a)
    c=a+b
    a=b
    b=c
    print(a,b,c)

while 내에서 돌아갈때 a,b에게 값을 할당해주기 전에 a+b를 정의해야하며 이 값이 먼저계산되어야한다.
그런 후에 b=a+b 로 값을 할당해주면 피보나치 수열을 볼 수 있다.

하지만 이건 또 맨 위의 구문과는 미세한 차이점이 있는데 a+b값에서 나타난다.
print(a,b,a+b)의 결과를 보면
맨 위의 코드는 1 1 2 / 1 2 3 / 2 3 5 / 3 5 8 ...
맨 마지막 코드는 1 1 1 / 1 2 2 / 2 3 3 / 3 5 5 ...
a+b를 다시 할당해주지 않는다는 것
그래서 c=a+b를 다시 반복해주면 그제서야 같은 결과가 나타난다.

a=0
b=1
while a<10:
    print(a)
    c=a+b
    a=b
    b=c
    print(a,b,c)
profile
안녕하세요

0개의 댓글