let rec facto_rec n =
  if n = 0 then 1 else n * facto_rec (n-1)

let facto_for n = 
  let r = ref 1 in
  for i = 1 to n do
     r := !r * i
  done;
  !r

let facto_while n =
  let m = ref 1 in
  let r = ref 1 in
  while !m <= n do
     r := !r * !m;
     m := !m + 1;
  done;
  !r