(* Tail recursive version *) let fib n = let rec fib_aux (n, a, b) = match (n, a, b) with | (0, a, b) -> a | _ -> fib_aux (n-1, a+b, a) in fib_aux (n, 0, 1) let _ = if Array.length Sys.argv <> 2 then begin Printf.printf "Usage: %s number\n" Sys.argv.(0); exit 1 end else begin print_int (fib (int_of_string Sys.argv.(1))); print_newline () end