더북(TheBook)

매번 재귀호출할 때마다 모듈로 연산(TAKEAWAY 4.8)을 수행하기 때문에 선행 조건이 자동으로 검사된다. 하지만 처음 호출할 때는 직접 검사해야 하는데, 이 부분은 래퍼(wrapper)C로 구현하면 좋다.

 

euclid.h

15 size_t gcd(size_t a, size_t b) {
16   assert(a);
17   assert(b);
18   if (a < b)
19     return gcd2(a, b);
20   else
21     return gcd2(b, a);
22 }

TAKEAWAY 7.15 재귀 함수의 선행 조건을 검사하는 부분은 래퍼 함수로 만든다.

이렇게 하면 재귀호출할 때마다 선행 조건을 검사할 필요가 없다. 최종 프로덕션 버전에서는 assert 매크로를 끈다.

재귀호출의 또 다른 유명한 예로 피보나치 수를 재귀적으로 정의한 것이 있는데 이는 B.C.200년경 인도 문헌에서 처음 등장했다. 현재는 다음과 같이 정의한다.

F1 = 1

(7.3)

F2 = 1

(7.4)

모든 i > 2에 대해 Fi = Fi–1 + Fi–2

(7.5)

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