0votos

Estructura de control de repeticion: Doble Factorial en C++ en Clojure

por josejuan hace 3 años

.

La función doble factorial de una cantidad entera n se simboliza por n!!. Cuando n es par, la función doble factorial es el producto de todos los enteros mayores que 2 y menores o iguales que n. En el caso que n sea impar, la funcion doble factorial es el producto de todos los enteros mayores que 1 y menores o iguales que n.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
(declare product') 
 
(defn product 
    ([      ] 1) 
    ([x & xs] (* x (product' xs)))) 
 
(defn product' [xs] (apply product xs)) 
 
(defn kFactorial [k n] (product' (range n 1 (- k)))) 
 
(def factorial      (partial kFactorial 1)) 
(def dobleFactorial (partial kFactorial 2)) 
 
(def dataReport 
  (let [fs (map dobleFactorial (range))] 
    (map #(-> (list %1 %2 (double (/ %2 %3)))) (range) fs (drop 1 fs)))) 
 
(defn printReportTo [n] 
  (map #(-> (apply (partial printf ";   %d: %d, %f\n") %)) (take n dataReport))) 
 
;; ejemplo 
(do 
  (dorun 
    (printReportTo 10)) 
  ()) 
 
;   0: 1, 1.000000 
;   1: 1, 0.500000 
;   2: 2, 0.666667 
;   3: 3, 0.375000 
;   4: 8, 0.533333 
;   5: 15, 0.312500 
;   6: 48, 0.457143 
;   7: 105, 0.273438 
;   8: 384, 0.406349 
;   9: 945, 0.246094 
;   nil 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.