📜  使用斯特林逼近计算阶乘

📅  最后修改于: 2021-04-28 13:51:54             🧑  作者: Mango

我们知道使用循环或递归来计算阶乘,但是如果要求我们不使用任何循环或递归来计算阶乘。是的,这可以通过众所周知的斯特林近似算法来实现。
例子:

Input : n = 6
Output : 720

Input : n = 2
Output : 2

斯特林近似值:是用于计算阶乘的近似值。对于近似阶乘的对数,它也很有用。
n! 〜sqrt(2 * pi * n)* pow((n / e),n)
注意:此公式将不会给出阶乘的确切值,因为它只是阶乘的近似值。

C++
// CPP program for calculating factorial
// of a number using Stirling
// Approximation
#include
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


Javascript


输出:

1
1
5
23
119
723
5086