Вы выполняли вычисления в аргументах в виде рекурсивных вызовов, но вы должны делать это в продолжение.Что касается CPS, то вам нужно «увеличить» данное продолжение.
let times l =
let rec aux l c =
match l with
| [] -> c 1 (* I assume that (times []) is one, and pass it to the next computation c. *)
| n::ns -> aux ns (fun x -> c (n * x)) (* In a new continuation: For a given value x, multiply by n, and pass it to the next computation c. *)
in aux l (fun r -> r)
Также приведены примеры, которые объясняют различия между CPS и прямым стилем, написанные в «Стиль передачи продолжения» в википедии может помочь.