Iterated Logarithm or Log*(n) is the number of times the logarithm function must be iteratively applied before the result is less than or equal to 1.
Applications: It is used in the analysis of algorithms (Refer Wiki for details)
// Recursive CPP program to find value of
// Iterated Logarithm
#include <bits/stdc++.h>
using namespace std;
int _log(double x, double base)
{
return (int)(log(x) / log(base));
}
double recursiveLogStar(double n, double b)
{
if (n > 1.0)
return 1.0 + recursiveLogStar(_log(n, b), b);
else
return 0;
}
// Driver code
int main()
{
int n = 100, base = 5;
cout << "Log*(" << n << ") = "
<< recursiveLogStar(n, base) << "\n";
return 0;
}
// Recursive Java program to
// find value of Iterated Logarithm
import java.io.*;
class GFG
{
static int _log(double x,
double base)
{
return (int)(Math.log(x) /
Math.log(base));
}
static double recursiveLogStar(double n,
double b)
{
if (n > 1.0)
return 1.0 +
recursiveLogStar(_log(n,
b), b);
else
return 0;
}
// Driver code
public static void main (String[] args)
{
int n = 100, base = 5;
System.out.println("Log*(" + n + ") = " +
recursiveLogStar(n, base));
}
}
// This code is contributed by jit_t
# Recursive Python3 program to find value of
# Iterated Logarithm
import math
def _log(x, base):
return (int)(math.log(x) / math.log(base))
def recursiveLogStar(n, b):
if(n > 1.0):
return 1.0 + recursiveLogStar(_log(n, b), b)
else:
return 0
# Driver code
if __name__=='__main__':
n = 100
base = 5
print("Log*(", n, ") = ", recursiveLogStar(n, base))
# This code is contributed by
# Sanjit_Prasad
// Recursive C# program to
// find value of Iterated Logarithm
using System;
public class GFG{
static int _log(double x, double baset)
{
return (int)(Math.Log(x) /
Math.Log(baset));
}
static double recursiveLogStar(double n,
double b)
{
if (n > 1.0)
return 1.0 +
recursiveLogStar(_log(n,
b), b);
else
return 0;
}
// Driver code
static public void Main (){
int n = 100, baset = 5;
Console.WriteLine("Log*(" + n + ") = " +
recursiveLogStar(n, baset));
}
}
// This code is contributed by ajit.
<?php
// Recursive PhP program to find
// value of Iterated Logarithm
function _log($x, $base)
{
return (int)(log($x) / log($base));
}
function recursiveLogStar($n, $b)
{
if ($n > 1.0)
return 1.0 +
recursiveLogStar(_log($n,
$b), $b);
else
return 0;
}
// Driver code
$n = 100; $base = 5;
echo "Log*(" , $n , ")"," = ",
recursiveLogStar($n, $base), "\n";
// This code is contributed by ajit
?>
<script>
// Javascript program to
// find value of Iterated Logarithm
function _log( x, base)
{
return (Math.log(x) /
Math.log(base));
}
function recursiveLogStar(n, b)
{
if (n > 1.0)
return 1.0 +
recursiveLogStar(_log(n,
b), b);
else
return 0;
}
// Driver code
let n = 100, base = 5;
document.write("Log*(" + n + ") = " +
recursiveLogStar(n, base));
// This code is contributed by sanjoy_62.
</script>
Output :
Log*(100) = 2
Time Complexity: O(logn)
Auxiliary Space: O(logn) due to recursive stack space
Iterative Implementation :
// Iterative CPP function to find value of
// Iterated Logarithm
int iterativeLogStar(double n, double b)
{
int count = 0;
while (n >= 1) {
n = _log(n, b);
count++;
}
return count;
}
// Iterative Java function to find value of
// Iterated Logarithm
public static int iterativeLogStar(double n, double b)
{
int count = 0;
while (n >= 1) {
n = _log(n, b);
count++;
}
return count;
}
// This code is contributed by pratham76
# Iterative Python function to find value of
# Iterated Logarithm
def iterativeLogStar(n, b):
count = 0
while(n >= 1):
n = _log(n, b)
count = count + 1
return count
# This code is contributed by
# Sanjit_Prasad
// Iterative C# function to find value of
// Iterated Logarithm
static int iterativeLogStar(double n, double b)
{
int count = 0;
while (n >= 1)
{
n = _log(n, b);
count++;
}
return count;
}
// This code is contributed by rutvik_56
<script>
// Iterative javascript function to find
// value of Iterated Logarithm
function iterativeLogStar(n, b)
{
var count = 0;
while (n >= 1)
{
n = _log(n, b);
count++;
}
return count;
}
// This code is contributed by 29AjayKumar
</script>
Time Complexity: O(logn)
Auxiliary Space: O(1)