본문 바로가기
Algorithm/Baekjoon

[백준/BOJ] 4150번 - 피보나치 수 (파이썬)

by shine-jung 2021. 7. 24.
반응형

문제 링크

 

코딩하기 전 생각하기

'''
메모이제이션을 활용하는 피보나치 재귀함수를 선언하자.
'''

 


 

코드

import sys
sys.setrecursionlimit(10**6)

memo = {}
def fib(n):
    if n == 1:
        return 1
    if n == 2:
        return 1
    if n in memo:
        return memo[n]
    memo[n] = fib(n - 1) + fib(n - 2)
    return memo[n]
    
n = int(input())
print(fib(n))

 


 

느낀점

 

이 문제를 통해서 메모이제이션이라는 개념에 대해서 알 수 있었다.

이 방식의 시간복잡도는 O(N)이다. 다음 링크를 참고하였다.

https://www.acmicpc.net/blog/view/28 

 

피보나치 수를 구하는 여러가지 방법

피보나치 수는 다음과 같이 정의되는 수열입니다. $F_0 = 0$ $F_1 = 1$ $F_n = F_{n-1} + F_{n-2}$ 피보나치 수를 조금 써보면, 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 와 같습니다. 피보나치 수를 구하는 함수

www.acmicpc.net

또한 파이썬에서 재귀 깊이에 따른 런타임 에러가 발생하여서 1, 2줄에 있는 코드를 추가하였다. 다음 링크를 참고하였다.

https://www.acmicpc.net/help/rte/RecursionError 

 

런타임 에러 도움말 (RecursionError)

RecursionError RecursionError는 재귀와 관련된 에러입니다. 가장 많이 발생하는 이유는 Python이 정한 최대 재귀 깊이보다 재귀의 깊이가 더 깊어질 때입니다. Python이 정한 최대 재귀 깊이는 sys.getrecursion

www.acmicpc.net

정말 유익한 문제다.

 

(주의) 기록용으로 작성한 글입니다. 코드가 허접하거나 알고리즘의 효율이 낮을 수 있습니다.

댓글 환영합니다!

반응형

댓글