/* simple_factorial.c Author: W. M. Farmer Revised: December 1, 2009 Description: Three simple implementations of the factorial function. */ #include int fact_rec(int n) { if (n == 0) return 1; else return fact_rec(n - 1) * n; } int fact_tail_rec_aux(int n, int accum) { if (n == 0) return accum; else return fact_tail_rec_aux(n - 1, accum * n); } int fact_tail_rec(int n) { return fact_tail_rec_aux(n, 1); } int fact_iter(int n) { int accum = 1; while (n != 0) { accum = accum * n; n = n - 1; } return accum; } int main() { int n = 4; printf("fact_rec(%d) = %d\n", n, fact_rec(n)); printf("fact_tail_rec(%d) = %d\n", n, fact_tail_rec(n)); printf("fact_iter(%d) = %d\n", n, fact_iter(n)); return 0; }