#include <stdio.h> /*tail recursive*/ int fact_iter(int product, int count, int max_count) { if (count > max_count) return product; fact_iter(product * count, count + 1, max_count); } int factorial(int n) { fact_iter(1, 1, n); } int main() { printf("factorial(5) = %d\n", factorial(5)); return 0; } /* fact_iter(1, 1, 4) fact_iter(1, 2, 4) fact_iter(2, 3, 4) fact_iter(6, 4, 4) fact_iter(24,5, 4) */ /*Reference: <<Structure and Interpretation of Computer Programs>>*/