fork download
  1. let memo n f =
  2. let h = Hashtbl.create n in
  3. let rec g k = match Hashtbl.find_opt h k with
  4. Some v -> v
  5. | None -> let v = f g k in Hashtbl.add h k v; v
  6. in g
  7. open Num
  8. let rec f n =
  9. let aux g = function
  10. 0 -> num_of_int 4
  11. | 1 -> num_of_string "17/4"
  12. | n -> (num_of_int 108) -/ (num_of_int 815) // g (n - 1) +/ (num_of_int 1500) // (g (n - 1) */ g (n - 2))
  13. in memo n aux n
  14. let (<<) f g x = f (g x)
  15. let println = print_newline << print_string << approx_num_fix 30
  16. let () =
  17. println @@ f 0;
  18. println @@ f 1;
  19. println @@ f 2;
  20. println @@ f 3;
  21. println @@ f 80;
  22.  
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
+4.000000000000000000000000000000
+4.250000000000000000000000000000
+4.470588235294117647058823529412
+4.644736842105263157894736842105
+4.999999999999999996426201795080