![]() |
![]() |
![]() |
![]() |
![]() |
|
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.