In principle,
rabbits
, previous_month
, and
penultimate_month
should work fine together. However, if
you just put them as is into a program, you soon discover that, no
matter how you arrange the functions, at least one function is
referred to before it is defined. In the following arrangement,
for example, rabbits
is referred to before it is defined.
int previous_month (int n) {return rabbits (n - 1);} int penultimate_month (int n) {return rabbits (n - 2);} int rabbits (int n) { if (n == 0 || n == 1) return 1; else return previous_month (n) + penultimate_month (n);}
The C++ compiler cannot compile a program that includes these three
functions defined in this order, because the C++ compiler does not know
how to prepare calls to the rabbits
function before the
rabbits
function is defined. Yet calls to the rabbits
function occur in both previous_month
and penultimate_month
,
both of which are defined before rabbits
is defined.