매번 재귀호출할 때마다 모듈로 연산(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)