Coding/Python

[코뮤니티] 피보나치 수열 파이썬(python)으로 구하기 (추석맞이 코딩챌린지)

폴밴 2021. 9. 18. 16:30

피보나치수열은 이전 두 값을 더한 값이 다음 값이 되는 수열입니다.

이를 점화식으로 나타내면 다음과 같습니다.

피보나치 수열

만약 (i)번째 피보나치수열을 구하는 코드를 부족한 실력이지만,

파이썬으로 작성하면 어떻게 될지 알아보겠습니다.

num = [0, 1, 0]
i = 0
n = 2
i = int(input("피보나치 수열의 몇번째 숫자를 출력하시겠습니까? : "))

if i >= 2:
    print(f"{num[0]} + 0 = {num[2]}")
    while n <= i:
       num[2] = num[1] + num[0]
       print(f"{num[0]} + {num[1]} = {num[2]}")
       num[0] = num[1]
       num[1] = num[2]
       n += 1
else:
    print("Error : 2 이상의 자연수를 입력해주세요.")

print(f"\n{i}번째 피보나치 수열의 값은 {num[2]}입니다.")

언뜻 보면 이해가 어려워보일 수 있어서 부분을 나누어서 알아보겠습니다.

1. 변수 선언부분

num = [0, 1, 0]
i = 0
n = 2
i = int(input("피보나치 수열의 몇번째 숫자를 출력하시겠습니까? : "))

먼저, 피보나치수열의 (n-2) 번째 (n-1) 번째, (n) 번 째 값을 저장하는 변수를 리스트로 작성했습니다.

초기값으로 첫 번째 값과 두 번째 값은 각각 0, 1이기 때문에 미리 넣어두었습니다.

그리고 입력받을 값을 저장하는 변수 i를 선언하고,

input 함수는 문자열로 값을 받기 때문에 연산을 위해 정수형 int로 바꿔줍니다.

그리고 이후 반복문에서 사용할 변수 n을 선언하는데,

1번째(num [0])와 2번째(num [1]) 수열의 값은 이미 정해져 있으므로 n=2 (인덱스2)부터 시작하면 됩니다.

2. 반복문 부분

if i >= 2:
    print(f"{num[0]} + 0 = {num[2]}")
    while n <= i:
       num[2] = num[1] + num[0]
       print(f"{num[0]} + {num[1]} = {num[2]}")
       num[0] = num[1]
       num[1] = num[2]
       n += 1
else:
    print("Error : 2 이상의 자연수를 입력해주세요.")

print(f"\n{i}번째 피보나치 수열의 값은 {num[2]}입니다.")

먼저 피보나치수열은 2개 이상의 수열에서 의미가 있으므로 그보다 작은 수를 입력하면 에러가 뜨도록 했습니다.

반복문을 이용해서 n = i가 될 때까지 더하기를 반복해주게 됩니다.

먼저 앞의 두 값을 더 해서 num [2]에 저장하고,

num [0]에는 num [1]의 값을 저장하고, num[1]에는 num [2] 값을 저장합니다.

이를 그림으로 나타내면,

파란색 화살표 부분을

num[0] = num[1]
num[1] = num[2]

이 코드가 하게 되는 것입니다.

그래서 마지막으로 계산된 값 num [2]를 출력하게 됩니다.

#코뮤니티_코딩챌린지