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 프레임이 있었다.
우연히 무한 재귀를 작성했다면 함수가 재귀 호출을 하지 않는 베이스 케이스가 있는지 확인해야 한다. 그리고 베이스 케이스가 있다면 베이스 케이스에 도달하는 경우가 있는지 확인해야 한다.