Как, вариант 1:
let rec factorial n =
match n with
| 0 | 1 -> 1
| _ -> n * factorial(n-1)
Как, вариант 2 (хвостовая рекурсия, скомпилированная в цикл):
let factorial n =
let rec loop i acc =
match i with
| 0 | 1 -> acc
| _ -> loop (i-1) (acc * i)
loop n 1
Если: нет, см. Мой ответ:
Хотя или хвостовой рекурсии в F #, что использовать, когда?
, где я выступаю за то, чтобы часто избегать итерации и рекурсии в пользу функций более высокого порядка. Но если вы только начинаете, возможно, пока не слишком беспокоитесь об этом совете. (Но тогда посмотрите, например, ответ @ ChaosPandion или, например,
let factorial n = [1..n] |> List.fold (*) 1
Или даже:
let factorial n = [1..n] |> List.reduce (*) // doesn't require the 2nd parameter