더북(TheBook)

5.10 무한 재귀

만약 재귀가 베이스 케이스에 절대로 도달하지 않는다면 재귀 호출은 영원히 일어나고, 프로그램은 결코 종료되지 않는다. 이를 무한 재귀(infinite recursion)라고 하고, 일반적으로 무한 재귀는 좋은 게 아니다. 다음은 무한 재귀를 하는 가장 작은 프로그램이다.

def recurse():

recurse()

대부분의 프로그래밍 환경에서 무한 재귀를 갖는 프로그램이 실제로 영원히 실행되는 것은 아니다. 파이썬은 최대 재귀 깊이(maximum recursion depth)에 도달하면 오류 메시지를 보여준다.

File "<stdin>", line 2, in recurse

File "<stdin>", line 2, in recurse

File "<stdin>", line 2, in recurse

.

.

.

File "<stdin>", line 2, in recurse

RuntimeError: Maximum recursion depth exceeded

이전 장에서 본 트레이스백보다 이번 트레이스백이 조금 더 크다. 오류가 발생했을 때 스택에서는 1,000개의 recurse 프레임이 있었다.

우연히 무한 재귀를 작성했다면 함수가 재귀 호출을 하지 않는 베이스 케이스가 있는지 확인해야 한다. 그리고 베이스 케이스가 있다면 베이스 케이스에 도달하는 경우가 있는지 확인해야 한다.

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