let rec factorial = function
    | 0 -> 1
    | n -> assert (n > 0); n * factorial(n - 1)