파이썬 기본문서를 보던 중 (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)