0votos

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

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
dobleFactorial :: Integer -> Integer 
dobleFactorial n = product [n, n - 2 .. 1] 
 
main = do 
 
    let report n = let dfp = dobleFactorial n 
                       dfi = dobleFactorial (n + 1) 
                       fra = fromIntegral dfp / fromIntegral dfi 
                   in  putStrLn $ show n ++ ", " ++ show dfp ++ ", " ++ show fra 
 
    mapM_ report [1..20] 
 
{- 
1, 1, 0.5 
2, 2, 0.6666666666666666 
3, 3, 0.375 
4, 8, 0.5333333333333333 
5, 15, 0.3125 
6, 48, 0.45714285714285713 
7, 105, 0.2734375 
8, 384, 0.40634920634920635 
9, 945, 0.24609375 
10, 3840, 0.3694083694083694 
11, 10395, 0.2255859375 
12, 46080, 0.340992340992341 
13, 135135, 0.20947265625 
14, 645120, 0.31825951825951826 
15, 2027025, 0.196380615234375 
16, 10321920, 0.29953837012660545 
17, 34459425, 0.1854705810546875 
18, 185794560, 0.2837731927515209 
19, 654729075, 0.17619705200195313 
20, 3715891200, 0.27026018357287707 
-} 
3 comentarios
0votos

Escrito por Rene Castillo hace 3 años

Excelente y veloz!!!

Cómo se plantearia la solucion en DEVC++ ??
0votos

Escrito por josejuan hace 3 años

Hola, un forma podría ser:
llong dobleFactorial(int n) {
  llong r = n;
  while(n > 2) r *= (n -= 2);
  return r;
}
0votos

Escrito por Rene Castillo hace 3 años

Hola estimado, no logro correr el código en DEVC++... Otra sugerencia???

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.