백준 알고리즘 10026번을 풀던 와중, 채점 과정에서 런타임 에서(RecursionError)가 발생했습니다.
발생한 이유를 알아보니 다음과 같습니다.
-파이썬에서 정한 최대 재귀 깊이보다 재귀가 너무 많이 발생할 경우.
즉, 설정된 값보다 재귀가 많이 발생할 경우 RecursionError가 발생함을 알게되었습니다.
해결 방법은 다음과 같습니다.
- 재귀를 사용하지 않는 방식으로 코드 구현하기. (재귀를 활용한 코드를 반복문을 통한 코드로 변경)
- 파이썬 sys 모듈에 있는 sys.setrecursionlimit()을 이용하여 최대 재귀 깊이를 변경해주기
sys.setrecursionlimit(10000)
해당 문제에서 나올 수 있는 최대 깊이인 10000으로 값을 설정해주어 문제를 해결하였습니다.
*재귀함수의 경우 코드를 효율적으로 짤 수 있다는 장점이 있지만 반대로 함수에서 함수를 호출하는(자신을 재참조) 방식이기 때문에 메모리를 많이 잡아먹고 함수가 return 될 경우 메모리상에서 이전 함수 위치로 이동하기 때문에 반복문보다 시간이 오래걸릴 수 있습니다.
장점과 단점이 공존하는 만큼, 무조건적인 재귀의 활용보다는 재귀의 특성을 바탕으로 상황에 맞춰 적절히 활용하면 더욱 좋은 코드가 나오지 않을까 생각합니다.
읽어주셔서 감사합니다.
'파이썬 > info' 카테고리의 다른 글
UnboundLocalError: local variable '' referenced before assignment (nonlocal vs global) (0) | 2023.07.03 |
---|---|
파이썬 deque TypeError: cannot unpack non-iterable int object (0) | 2022.07.13 |
[백준 알고리즘] 메모리 초과 발생 이유 및 해결 방안 (2) | 2022.07.08 |