A simple program to demonstrate how to do Factorial caching in Java
package com.hubberspot.example;
import java.util.Scanner;
public class FactorialCaching {
// an array of long values to cache the factorial values
public static long[] factorial = new long[21];
// a loop counter that counts till end of number for
// which we want to calculate factorial
public static int fact = 0;
// static initializer block, the block of executes as
// soon as the class is loaded into the memory for
// the first time. Here it initializes value of first
// element of array to be 1 as factorial of 1 is 1
static {
factorial[0] = 1;
}
// method where the logic for factorial
// calculations goes. It takes a argument which
// is the number passed for which we want to
// calculate the factorial
public static long factorial(int x) {
// fact goes from zero to number-1 for which we want to
// calculate the factorial
while(fact < x) {
// applying formula as 3! = 3 * 2!
factorial[fact + 1] = factorial[fact] * (fact + 1);
// increment the fact for next value
fact++;
}
// return the result
return factorial[x];
}
public static void main(String[] args) {
// Create a Scanner object to read input from console
Scanner scanner = new Scanner(System.in);
// prompt the user to enter the number for which factorial
// is to be calculated
System.out.println("Enter the number for which you " +
"want to calculate factorial - ");
// prompting the user to enter number between 0 to 20
System.out.println("Note : \"The number should range " +
"from 0 to 20\"");
// store the number entered into number variable
int number = scanner.nextInt();
// For the first time call factorial method to store
// values into the array of calculated factorials
long result = FactorialCaching.factorial(number);
// the result displayed on the console
System.out.println("The factorial of "+ number +" : " + result);
System.out.println();
System.out.println("Enter the another number for which you " +
"want to calculate factorial - ");
// prompting the user to enter number between 0 to 20
System.out.println("Note : \"The number should range " +
"from 0 to "+number+"\"");
// store the number entered into number variable
number = scanner.nextInt();
// After first call to factorial method next time
// we just access the factorial by accessing the
// long array through index
System.out.println("The factorial after caching is done : "
+ FactorialCaching.factorial[number]);
}
}
Output of the program : 