# Calculating Factorials using Stirling Approximation

• Difficulty Level : Medium
• Last Updated : 26 Sep, 2022

We are aware of calculating factorials using loops or recursion, but if we are asked to calculate factorial without using any loop or recursion. Yes, this is possible through a well-known approximation algorithm known as Stirling approximation

Examples:

Input : n = 6
Output : 720

Input : n = 2
Output : 2

Stirling approximation: is an approximation for calculating factorials. It is also useful for approximating the log of a factorial.
n! ~ sqrt(2*pi*n) * pow((n/e), n)
Note: This formula will not give the exact value of the factorial because it is just the approximation of the factorial.

## 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

 ``

Time complexity: O(logn)
Auxiliary space: O(1)