可怕的递归
#include <stdlib.h>
#include <stdio.h>
static unsigned long count;
long fact(int x) {
++count;
/* fact(0) is 1, negative numbers don't make sense so we pretend
* they're 1. */
if (x < 2) return 1;
return x * fact(x - 1);
}
int main(void)
{
int i;
long f;
for (i = 1; i < 20; ++i) {
count = 0;
f = fact(i);
printf("fact(%02d) gives %ld after %lu iteration%s.\n",
i, f, count, count == 1 ? "" : "s");
}
return 0;
}
输出结果:
fact(01) gives 1 after 1 iteration.
fact(02) gives 2 after 2 iterations.
fact(03) gives 6 after 3 iterations.
fact(04) gives 24 after 4 iterations.
fact(05) gives 120 after 5 iterations.
fact(06) gives 720 after 6 iterations.
fact(07) gives 5040 after 7 iterations.
fact(08) gives 40320 after 8 iterations.
fact(09) gives 362880 after 9 iterations.
fact(10) gives 3628800 after 10 iterations.
fact(11) gives 39916800 after 11 iterations.
fact(12) gives 479001600 after 12 iterations.
fact(13) gives 1932053504 after 13 iterations.
fact(14) gives 1278945280 after 14 iterations.
fact(15) gives 2004310016 after 15 iterations.
fact(16) gives 2004189184 after 16 iterations.
fact(17) gives -288522240 after 17 iterations.
fact(18) gives -898433024 after 18 iterations.
fact(19) gives 109641728 after 19 iterations.