let rec fact1 n =
  match n with
    0 -> 1
  | n -> n * fact2 (n - 1)
and fact2 n = 
  if n < 2 then 1 
           else n * fact3 (n - 1)
and fact3 = function
  | 0 -> 1 
  | n -> n * fact1 (n - 1);; 

print_int (fact1 5);;
print_string "\n";;
print_int (fact2 5);;
print_string "\n";;
print_int (fact3 5);;

