OCaml Functions Recursive and Mutually Recursive Functions


Example

You can define a function to be recursive with the rec keyword, so it can call itself.

# let rec fact n = match n with
    | 0 -> 1
    | n -> n * fact (n - 1);;

val fact : int -> int = <fun>

# fact 0;;
- : int = 1
# fact 4;;
- : int = 24

You can also define mutually recursive functions with the and keyword, so they can call each other.

# let rec first x = match x with
    | 1 -> 1
    | x -> second (x mod 10)

  and second x = first (x + 1);;

val first : int -> int = <fun>
val second : int -> int = <fun>

# first 20;;
- : int = 1
# first 12345;;
- : int = 1

Notice that the second function does not have the req keyword.