Last updated
Last updated
함수는 실행되면 메모리 공간 중 스택(stack) 영역에 저장되고, 실행이 종료되면 stack에서 제거된다.
그러나 재귀 함수는 일반적인 함수들과 달리 함수가 종료되지 않고 계속해서 중첩
되기 때문에 stack에서 제거되지 않는다. 즉, stack에 함수가 계속해서 쌓여 간다는 뜻이다.
따라서 이렇게 함수가 쌓이다가 허용된 stack의 크기를 초과하게 되면, stack overflow
가 발생한다. python에서는 이를 방지하기 위해 재귀 함수의 중첩 호출 횟수에 제한을 두고 있다.
python의 재귀 제한은 system 관련 행위를 수행하는 모듈인 sys를 호출하여 제어할 수 있다.
default value는 1000이다.
아래 코드와 같이 재귀 제한을 10으로 설정하고 10번의 재귀를 수행해보았다.
결과는 아래와 같았다.
파이썬이 코드를 수행하기 위해 내부적으로 5번의 함수 스택을 쌓기 때문에 다음과 같이 동작하는 것 같다.
recursion limit을 15로 높여준 뒤 다시 코드를 실행하자 모든 재귀가 성공적으로 호출되었다.
그렇다면, 다음과 같이 한 재귀 함수가 자기 자신을 여러 번 호출한다면 어떻게 될까?
한 번의 호출에 대해 stack도 두 배로 차지할 것이므로, 오류가 발생할 것이라고 생각했다.
그러나 성공적으로 수행되었다.
따라서 setrecursionlimit 함수는 넓이에 상관 없이 중첩되는 깊이에만 관여
함을 알 수 있었다.