안녕하세요 판타지코딩입니다!
파이썬을 활용하여 프로그램을 개발하다 보면 'Recursion Error'가 발생합니다.
오늘은 그 이유에 대해서 알아보고 해결 방법을 알아보겠습니다!
1. Recursion Error가 무엇인가?
해석해보면 재귀 오류 라고 할 수 있습니다. 무언가를 반복하는데서 나타나는 오류라고 할 수 있는데요, 과연 이 오류가 나타나는 원인이 무엇일까요? 우선, 이 오류가 뜨기 전 코드의 상황은 아마 반복적인 재귀함수의 호출일 겁니다. 함수 내에서 함수를 호출하는 데에도 어느 정도 횟수가 있을텐데, 그 횟수가 굉장히 커짐을 의미합니다. Visual studio code에서 코드를 작성하면서 나타나는 메세지를 보면 약 900 후반 대의 숫자가 출력되며 이 횟수만큼 재귀가 발생했다는 메세지가 나타납니다. 이것은 곧 약 1,000 정도가 재귀의 한도임을 예상할 수 있습니다. 함수의 반복적인 호출이 꼭 필요하다면 어떻게 해결해야 할까요?
2. Recursion Error 해결 방법
방법은 두 가지가 있습니다.
첫 번째 방법은 파이썬에서 제공하는 한도를 늘리는 것입니다. sys.setresursionlimit() 코드를 활용해서 재귀의 횟수를 증가시키는 겁니다.
import sys
sys.setrecursionlimit(10000)
함수 이름을 보면 알 수 있듯이 recursion limit을 괄호 안의 숫자로 셋팅한다는 의미로 이해하면 될 것 같습니다. 기본 셋팅이 1000이라면 위의 코드는 10000으로 설정하여 10배 가량 제한을 늘렸습니다. 이 코드를 활용할 때에는 sys 모듈을 import 해야함을 숙지하시면 좋겠습니다.
두 번째 방법은 '반복'을 활용하는 것입니다. 재귀함수의 활용은 반복을 위한 것입니다. 그런데 함수 안에서 함수를 호출하는 것이 너무 과해 오류가 생긴다면, 반복을 함수 안에서 하지 않고 함수 밖에서 하는 것입니다.
num = 1
func(num):
if(num==100):
break
func(num+1)
이 코드는 func라는 함수에 num이라는 변수를 인자로 넣고 num이 100이 되기 전까지 1씩 증가시킨 값을 다시 func 함수에 인자로 넣는 것입니다. 만약 num이 100이 아니라면, 100이 될 때까지 다시 func 함수에 +1을 한 값을 넣고 함수를 타게 됩니다. 그렇다면 이 코드를 반복문을 활용해서 바꿔보겠습니다.
num = 1
while(num!=100):
num+=1
num에 1을 저장하고, while문에서 num이 100이 되기 전까지 1씩 더합니다. 이렇게 작성하면 func라는 함수를 여러 번 타는 것은 아니기 때문에 함수의 깊이는 더 이상 깊어지지 않습니다. 함수 안에서 함수를 호출하는 재귀로 인한 오류가 발생한다면 이처럼 반복문을 활용하는 방식으로 코드를 작성해보시길 바랍니다.
감사합니다!
'파이썬' 카테고리의 다른 글
파이썬 함수 생성하기 / def가 무엇일까? (0) | 2023.02.06 |
---|---|
파이썬 자료형, 데이터 타입 알아보기 / type 활용 방법 (0) | 2023.02.04 |
파이썬 리스트와 튜플 (0) | 2023.01.31 |
파이썬 리스트의 길이 구하기 (0) | 2023.01.30 |
파이썬 for문 반복문 공부하기 (0) | 2023.01.19 |