Dev_from the Bottom

#11. Algorithm07_python) 피보나치 수열의 합 본문

Algorithm_study

#11. Algorithm07_python) 피보나치 수열의 합

고무라면 2022. 5. 12. 20:49

문제)

1+1+2+3+5+8+13+... 의 수열로 나열되는 "피보나치 수열"의 20번째 항까지의 합계

 

step1) 밑그림 : 피보나치 수열 출력

a1 = 1    # 첫번째 항
a2 = 1    # 두번째 항
n  = 2    # 두번째 항 초과부터 로직하고자

# answer = a1 + a2

# 수열 출력
print("피보나치 수열 : ", a1, a2, '', end = '')

while(n < 20):            # 20번째 항까지
    temp = a1 + a2        # temp 임시 변수
    print(temp,end=" ")   # 수열 출력
    # answer += temp
    a1 = a2               # 한단계 이동
    a2 = temp             # 한단계 이동
    n += 1

# 수열 자체를 한번에 표현하기가 어려워 나눠서 print

>>>
피보나치 수열 :  1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765

 

step2) 정답 출력

a1 = 1                    # 첫번째 항
a2 = 1                    # 두번째 항
n  = 2                    # 두번째 항 초과부터 로직하고자

answer = a1 + a2          # 합계

while(n < 20):            # 20번째 항까지
    temp = a1 + a2        # temp 임시 변수
    answer += temp
    a1 = a2               # 한단계 이동
    a2 = temp             # 한단계 이동
    n += 1

print(f'피보나치 수열의 20번째 항까지의 합 : {answer}')

>>>
피보나치 수열의 20번째 항까지 합 : 17710

 

step3) 메서드화

def algo07():
    a1 = 1
    a2 = 1
    n  = 2

    answer = a1 + a2

    while(n < 20):
        temp = a1 + a2
        answer += temp
        a1 = a2
        a2 = temp
        n += 1

    return answer

print(f'피보나치 수열의 20번째 항까지의 합 : {algo07()}')

>>>
피보나치 수열의 20번째 항까지의 합 : 17710

 

step4) 메서드 확장 : n값 입력받아, 메서드의 파라미터로

n_input = int(input('n 입력 : '))

def algo07_extend(n_input):
    a1 = 1
    a2 = 1
    n  = 2

    answer = a1 + a2

    while(n < n_input):
        temp = a1 + a2
        answer += temp
        a1 = a2
        a2 = temp
        n += 1

    return answer

print(f'피보나치 수열의 {n_input}번째 항까지의 합 : {algo07_extend(n_input)}')

>>>
n 입력 : 20
피보나치 수열의 20번째 항까지의 합 : 17710

 

# 배운점

  • while문 활용 : 상황에 따라 판단하여, for문 vs while문 선택
  • temp 변수 활용

 

# 소회

  • 구글링 해보니, 리스트를 활용한 피보나치 수열 구현도 있음
  • 추후 스스로 고민   

Comments