본문 바로가기
파이썬

파이썬 Recursion Error 해결 방법

by 여름코딩 2023. 2. 1.
반응형

안녕하세요 판타지코딩입니다!

 

파이썬을 활용하여 프로그램을 개발하다 보면 '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라는 함수를 여러 번 타는 것은 아니기 때문에 함수의 깊이는 더 이상 깊어지지 않습니다. 함수 안에서 함수를 호출하는 재귀로 인한 오류가 발생한다면 이처럼 반복문을 활용하는 방식으로 코드를 작성해보시길 바랍니다.

 

감사합니다!

반응형