Find the value of ln(N!) using Recursion
Last Updated :
23 Jun, 2022
Given a number N, the task is to find the log value of the factorial of N i.e. log(N!).
Note: ln means log with base e.
Examples:
Input: N = 2
Output: 0.693147
Input: N = 3
Output: 1.791759
Approach:
Method -1: Calculate n! first, then take its log value.
Method -2: By using the property of log, i.e. take the sum of log values of n, n-1, n-2 …1.
ln(n!) = ln(n*n-1*n-2*…..*2*1) = ln(n)+ln(n-1)+……+ln(2)+ln(1)
Below is the implementation of the Method-2:
C++
#include <bits/stdc++.h>
using namespace std;
double fact( int n)
{
if (n == 1)
return 0;
return fact(n - 1) + log (n);
}
int main()
{
int N = 3;
cout << fact(N) << "\n" ;
return 0;
}
|
C
#include <math.h>
#include <stdio.h>
long double fact( int n)
{
if (n == 1)
return 0;
return fact(n - 1) + log (n);
}
int main()
{
int n = 3;
printf ( "%Lf" , fact(n));
return 0;
}
|
Java
import java.util.*;
import java.io.*;
class logfact {
public static double fact( int n)
{
if (n == 1 )
return 0 ;
return fact(n - 1 ) + Math.log(n);
}
public static void main(String[] args)
{
int N = 3 ;
System.out.println(fact(N));
}
}
|
Python
import math
def fact(n):
if (n = = 1 ):
return 0
else :
return fact(n - 1 ) + math.log(n)
N = 3
print (fact(N))
|
C#
using System;
class GFG
{
public static double fact( int n)
{
if (n == 1)
return 0;
return fact(n - 1) + Math.Log(n);
}
public static void Main()
{
int N = 3;
Console.WriteLine(fact(N));
}
}
|
PHP
<?php
function fact( $n )
{
if ( $n == 1)
return 0;
return fact( $n - 1) + log( $n );
}
$n = 3;
echo fact( $n );
?>
|
Javascript
<script>
function fact(n)
{
if (n == 1)
return 0;
return fact(n - 1) + Math.log(n);
}
var N = 3;
document.write( fact(N).toFixed(6) + "<br>" );
</script>
|
Time Complexity: O(n)
Auxiliary Space: O(n)
Share your thoughts in the comments
Please Login to comment...