Cálculo de factoriales utilizando la aproximación de Stirling

Somos conscientes de calcular factoriales usando bucles o recursión, pero si nos piden calcular factoriales sin usar ningún bucle o recursión. Sí, esto es posible a través de un conocido algoritmo de aproximación conocido como aproximación de Stirling
Ejemplos: 
 

Input : n = 6
Output : 720

Input : n = 2
Output : 2

Aproximación de Stirling: es una aproximación para el cálculo de factoriales. También es útil para aproximar el logaritmo de un factorial. 
¡norte! ~ sqrt(2*pi*n) * pow((n/e), n) 
Nota: Esta fórmula no dará el valor exacto del factorial porque es solo la aproximación del factorial.
 

C++

// CPP program for calculating factorial
// of a number using Stirling
// Approximation
#include<bits/stdc++.h>
using namespace std;
 
// function for calculating factorial
long int stirlingFactorial(int n)
{
    if (n == 1)
        return 1;
    long int z;
    float e = 2.71; // value of natural e
     
    // evaluating factorial using
    // stirling approximation
    z = sqrt(2*3.14*n) * pow((n/e), n);
    return z;
}
 
// driver program
int main()
{
    cout << stirlingFactorial(1) << endl;
    cout << stirlingFactorial(2) << endl;
    cout << stirlingFactorial(3) << endl;
    cout << stirlingFactorial(4) << endl;
    cout << stirlingFactorial(5) << endl;
    cout << stirlingFactorial(6) << endl;
    cout << stirlingFactorial(7) << endl;
    return 0;
}

Java

// Java program for calculating
// factorial of a number using
// Stirling Approximation
class GFG
{
     
// function for
// calculating factorial
public static int stirlingFactorial(double n)
{
    if (n == 1)
        return 1;
    double z;
    double e = 2.71; // value of natural e
     
    // evaluating factorial using
    // stirling approximation
    z = Math.sqrt(2 * 3.14 * n) *
        Math.pow((n / e), n);
    return (int)(z);
}
 
// Driver Code
public static void main(String[] args)
{
    System.out.println(stirlingFactorial(1));
    System.out.println(stirlingFactorial(2));
    System.out.println(stirlingFactorial(3));
    System.out.println(stirlingFactorial(4));
    System.out.println(stirlingFactorial(5));
    System.out.println(stirlingFactorial(6));
    System.out.println(stirlingFactorial(7));
}
}
 
// This code is contributed by mits.

Python3

# Python3 program for calculating
# factorial of a number using
# Stirling Approximation
import math
 
# Function for calculating factorial
def stirlingFactorial(n):
    if (n == 1):
        return 1
     
    # value of natural e
    e = 2.71
     
    # evaluating factorial using
    # stirling approximation
    z = (math.sqrt(2 * 3.14 * n) * math.pow((n / e), n))
    return math.floor(z)
 
# Driver Code
print(stirlingFactorial(1))
print(stirlingFactorial(2))
print(stirlingFactorial(3))
print(stirlingFactorial(4))
print(stirlingFactorial(5))
print(stirlingFactorial(6))
print(stirlingFactorial(7))
 
# This code is contributed by mits

C#

// C# program for calculating
// factorial of a number using
// Stirling Approximation
 
class GFG
{
     
// function for
// calculating factorial
public static int stirlingFactorial(double n)
{
    if (n == 1)
        return 1;
    double z;
    double e = 2.71; // value of natural e
     
    // evaluating factorial using
    // stirling approximation
    z = System.Math.Sqrt(2 * 3.14 * n) *
        System.Math.Pow((n / e), n);
    return (int)(z);
}
 
// Driver Code
public static void Main()
{
    System.Console.WriteLine(stirlingFactorial(1));
    System.Console.WriteLine(stirlingFactorial(2));
    System.Console.WriteLine(stirlingFactorial(3));
    System.Console.WriteLine(stirlingFactorial(4));
    System.Console.WriteLine(stirlingFactorial(5));
    System.Console.WriteLine(stirlingFactorial(6));
    System.Console.WriteLine(stirlingFactorial(7));
}
}
 
// This code is contributed by mits.

PHP

<?php
// PHP program for calculating factorial
// of a number using Stirling
// Approximation
 
// Function for calculating factorial
function stirlingFactorial($n)
{
    if ($n == 1)
        return 1;
    $z;
     
    // value of natural e
    $e = 2.71;
     
    // evaluating factorial using
    // stirling approximation
    $z = sqrt(2 * 3.14 * $n) *
         pow(($n / $e), $n);
    return floor($z);
}
 
    // Driver Code
    echo stirlingFactorial(1),"\n";
    echo stirlingFactorial(2) ,"\n";
    echo stirlingFactorial(3) ,"\n";
    echo stirlingFactorial(4), "\n" ;
    echo stirlingFactorial(5) ,"\n";
    echo stirlingFactorial(6) ," \n";
    echo stirlingFactorial(7) ," \n";
 
// This code is contributed by anuj_67.
?>

Javascript

<script>
// Javascript program for calculating factorial
// of a number using Stirling
// Approximation
 
// Function for calculating factorial
function stirlingFactorial(n)
{
    if (n == 1)
        return 1;
    let z;
     
    // value of natural e
    let e = 2.71;
     
    // evaluating factorial using
    // stirling approximation
    z = Math.sqrt(2 * 3.14 * n) *
         Math.pow((n / e), n);
    return Math.floor(z);
}
 
    // Driver Code
    document.write( stirlingFactorial(1) + "<br>");
    document.write( stirlingFactorial(2) + "<br>");
    document.write( stirlingFactorial(3) + "<br>");
    document.write( stirlingFactorial(4) + "<br>");
    document.write( stirlingFactorial(5) + "<br>");
    document.write( stirlingFactorial(6) + "<br>");
    document.write( stirlingFactorial(7) + "<br>");
 
// This code is contributed by _saurabh_jaiswal.
</script>

Producción: 
 

1
1
5
23
119
723
5086

Este artículo es una contribución de Shivam Pradhan (anuj_charm) . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *