let (<<) f g x = f (g x)
let f =
let rec aux m a b c =
if m = 0 then c else aux (m - 1) b c (add_big_int (add_big_int a b) c)
in function
n when n < 1 -> big_int_of_int (-1)
| n when n < 4 -> big_int_of_int (n - 1)
| n -> aux (n - 3) zero_big_int unit_big_int (big_int_of_int 2)
let g
= Printf.printf
"%s\t" << string_of_big_int
<< f
let () = List.iter g
[0;1;2;3;4;5;6;7;8;9;1000]
b3BlbiBCaWdfaW50CmxldCAoPDwpIGYgZyB4ID0gZiAoZyB4KQpsZXQgZiA9IAoJbGV0IHJlYyBhdXggbSBhIGIgYyA9IAoJCWlmIG0gPSAwIHRoZW4gYyBlbHNlIGF1eCAobSAtIDEpIGIgYyAoYWRkX2JpZ19pbnQgKGFkZF9iaWdfaW50IGEgYikgYykKCWluIGZ1bmN0aW9uCgkJICBuIHdoZW4gbiA8IDEgLT4gYmlnX2ludF9vZl9pbnQgKC0xKQoJCXwgbiB3aGVuIG4gPCA0IC0+IGJpZ19pbnRfb2ZfaW50IChuIC0gMSkKCQl8IG4gLT4gYXV4IChuIC0gMykgemVyb19iaWdfaW50IHVuaXRfYmlnX2ludCAoYmlnX2ludF9vZl9pbnQgMikKbGV0IGcgPSBQcmludGYucHJpbnRmICIlc1x0IiA8PCBzdHJpbmdfb2ZfYmlnX2ludCA8PCBmCmxldCAoKSA9IExpc3QuaXRlciBnIFswOzE7MjszOzQ7NTs2Ozc7ODs5OzEwMDBd