El doble factorial de un entero no negativo n, es el producto de todos los enteros del 1 al n que tienen la misma paridad (par o impar) que n. También se le llama semifactorial de un número y se denota por !! . Por ejemplo, el factorial doble de 9 es 9*7*5*3*1, que es 945. ¡Observe que una consecuencia de esta definición es 0! = 1.
Ejemplos:
Input: 6 Output: 48 Note that 6*4*2 = 48 Input: 7 Output: 105 Note that 7*5*3 = 105
Para n par, el factorial doble es:
Para n impar, el factorial doble es:
Solución recursiva:
el factorial doble se puede calcular utilizando la siguiente fórmula recursiva.
n!! = n * (n-2)!! n!! = 1 if n = 0 or n = 1
A continuación se muestra la implementación del doble factorial.
C++
#include<stdio.h> // function to find double factorial of given number unsigned int doublefactorial(unsigned int n) { if (n == 0 || n==1) return 1; return n*doublefactorial(n-2); } int main() { printf("Double factorial is %d", doublefactorial(5)); return 0; }
Java
import java.io.*; class GFG { // function to find double factorial // of given number static long doublefactorial(long n) { if (n == 0 || n==1) return 1; return n * doublefactorial(n - 2); } // Driver code static public void main (String[] args) { System.out.println("Double factorial" + " is " + doublefactorial(5)); } } // This code is contributed by anuj_67.
Python3
# function to find double # factorial of given number def doublefactorial(n): if (n == 0 or n == 1): return 1; return n * doublefactorial(n - 2); # Driver Code print("Double factorial is", doublefactorial(5)); # This code is contributed # by Smitha
C#
using System; class GFG { // function to find double factorial // of given number static uint doublefactorial(uint n) { if (n == 0 || n==1) return 1; return n * doublefactorial(n - 2); } // Driver code static public void Main () { Console.WriteLine("Double factorial" + " is " + doublefactorial(5)); } } // This code is contributed by anuj_67.
PHP
<?php // PHP code for // Double factorial // function return // double factorial function doublefactorial($n) { if ($n == 0 || $n==1) return 1; return $n * doublefactorial($n - 2); } // Driver Code echo "Double factorial is ", doublefactorial(5); // This code is contributed by Ajit. ?>
Javascript
<script> // Javascript program to find double factorial of given number // function to find double factorial // of given number function doublefactorial(n) { if (n == 0 || n==1) return 1; return n * doublefactorial(n - 2); } // Driver code document.write("Double factorial" + " is " + doublefactorial(5)); // This code is contributed by susmitakundugoaldanga. </script>
Producción:
Double factorial is 15
Solución iterativa:
el factorial doble también se puede calcular de forma iterativa, ya que la recursividad puede ser costosa para números grandes.
C++
#include<stdio.h> // function to find double factorial of given number unsigned int doublefactorial(unsigned int n) { int res = 1; for (int i=n; i>=0; i=i-2) { if (i==0 || i==1) return res; else res *= i; } } int main() { printf("Double factorial is %d", doublefactorial(5)); return 0; }
Java
// Java Program to find double factorial // of given number import java .io.*; class GFG { // function to find double factorial // of given number static int doublefactorial(int n) { int res = 1; for (int i = n; i >= 0; i = i-2) { if (i == 0 || i == 1) return res; else res *= i; } return res; } // Driver code public static void main(String[] args) { System.out.println("Double factorial" + " is " + doublefactorial(5)); } } // This code is Contributed by Anuj_67
Python3
# Python3 Program to find double # factorial of given number # Function to find double # factorial of given number def doublefactorial(n): res = 1; for i in range(n, -1, -2): if(i == 0 or i == 1): return res; else: res *= i; # Driver Code print("Double factorial is", doublefactorial(5)); # This code is contributed by mits
C#
// C# Program to find double factorial // of given number using System; class GFG { // function to find double factorial // of given number static int doublefactorial(int n) { int res = 1; for (int i = n; i >= 0; i = i-2) { if (i == 0 || i == 1) return res; else res *= i; } return res; } // Driver code static void Main() { Console.Write("Double factorial" + " is " + doublefactorial(5)); } } // This code is Contributed by Anuj_67
PHP
<?php // function to find double // factorial of given number function doublefactorial( $n) { $res = 1; for ($i = $n; $i >= 0; $i = $i - 2) { if ($i == 0 or $i == 1) return $res; else $res *= $i; } } // Driver Code echo "Double factorial is ", doublefactorial(5); // This code is contributed by anuj_67. ?>
Javascript
<script> // Javascript Program to find // double factorial of given number // function to find double factorial // of given number function doublefactorial(n) { let res = 1; for (let i = n; i >= 0; i = i-2) { if (i == 0 || i == 1) return res; else res *= i; } return res; } document.write("Double factorial" + " is " + doublefactorial(5)); </script>
Producción:
Double factorial is 15
Complejidad temporal: O(n).
Espacio auxiliar : O (1) ya que usa espacio constante
Puntos importantes :
- El doble factorial y el factorial están relacionados usando la siguiente fórmula.
Note : n!! means double factorial. If n is even, i.e., n = 2k n!! = 2kk! Else (n = 2k + 1) n!! = (2k)! / 2kk!
2. El factorial doble se usa con frecuencia en combinatoria. Consulte wiki para obtener una lista de aplicaciones. Una aplicación de ejemplo es el recuento de coincidencias perfectas de un gráfico completo K n+1 para n impar.
Referencias:
https://en.wikipedia.org/wiki/Double_factorial
Este artículo es una contribución de Rahul Agrawal . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA