더북(TheBook)

6.8 타입 검사

factorial을 호출하면서 인수로 1.5를 주면 무슨 일이 일어날까?

>>> factorial(1.5)

RuntimeError: Maximum recursion depth exceeded

무한 재귀가 일어난 것 같다. 어떻게 이렇게 될까? factorial 함수는 n == 0일 때 베이스 케이스를 갖고 있다. 그러나 n이 정수가 아니라면 베이스 케이스를 놓칠 수 있고, 영원히 재귀를 하게 된다.

첫 번째 재귀 호출에서 n의 값은 0.5가 된다. 다음 재귀에서 n-0.5가 된다. 여기서 더 작은 수(더 음수)가 될 수 있지만, 결코 0은 되지 않게 된다.

여기서 두 가지 선택을 할 수 있다. factorial 함수를 일반화해서 부동소수점 수에서도 동작하게 하거나 factorial에서 인수의 타입을 검사하게 하는 것이다. 첫 번째 옵션은 감마 함수라고 부르며, 이는 이 책의 범위를 다소 벗어난다. 따라서 우리는 두 번째를 선택하겠다.

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