Факториальный расчет в OCaml: рекурсивные, хвостовые рекурсивные и итерационные методы

Чтобы вычислить факториал числа в OCaml, вы можете использовать несколько методов. Вот несколько примеров кода:

  1. Рекурсивный метод:

    let rec factorial n =
    if n <= 1 then
    1
    else
    n * factorial (n - 1)

    Этот метод использует рекурсию для вычисления факториала. Если число nменьше или равно 1, оно возвращает 1. В противном случае оно умножает nна факториал n - 1.

  2. Метод хвостовой рекурсии:

    let factorial n =
    let rec factorial' acc = function
    | 0 -> acc
    | n -> factorial' (n * acc) (n - 1)
    in
    factorial' 1 n

    Этот метод использует хвостовую рекурсию, которая позволяет избежать переполнения стека при больших входных данных. Он накапливает значение факториала в параметре accдо тех пор, пока nне достигнет 0.

  3. Итеративный метод:

    let factorial n =
    let result = ref 1 in
    for i = 2 to n do
    result := i * !result
    done;
    !result

    Этот метод использует цикл для итеративного вычисления факториала. Он инициализирует изменяемую ссылку resultзначением 1 и умножает ее на каждое число от 2 до n.

Обратите внимание, что OCaml чувствителен к регистру, поэтому при написании фрагментов кода обязательно используйте правильные заглавные буквы.