ついでに、let rec 使用可なら lazy を使う必要すらない

let rec fix f x = f (fix f) x
let fact = fix <| fun f x -> if x = 0 then 1 else x * f (x - 1)