더북(TheBook)

지금까지 내용을 종합해 볼까요? 재귀 함수를 스택 프레임 관점에서 바라보면 상태 정보를 가지고 있는 지역 변수는 서로 다른 스택 프레임에 저장됩니다. 그렇기에 함수 내에서 자기 자신을 호출한다고 해도 같은 기능의 코드를 실행하는 것일 뿐 그 실행 결과는 서로 다른 스택 프레임에 있는 지역 변수에 저장됩니다. 이때 기저 사례를 두지 않으면 계속 호출이 일어나고 스택 프레임이 저장되는 메모리가 한정적이기 때문에 언젠가는 오류가 발생합니다.

따라서 재귀 함수를 설계할 때는 두 가지를 고려해야 합니다. 1) 언제 어떤 인수를 전달하여 호출할 것인지와 2) 재귀 호출을 멈추는 조건인 기저 사례를 정하는 것입니다. 재귀 함수가 스스로를 호출할 때 매개변수를 그 크기가 줄어드는 형태로 전달하여 언젠가는 반드시 기저 사례와 만나게 해야만 에러를 일으키지 않습니다. (파이썬에서는 RecursionError라고 명명했지만 함수가 어떤 함수를 계속 호출하여 스택 프레임으로 쓰일 메모리 공간이 모자라게 되는 에러를 스택 오버플로(stack overflow)라고 합니다. 유명한 사이트 이름과 같지요.)

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.