This JavaFactorialUsingRecursion Example shows shows how to generate factorial of a given number using recursive function. Recursive are the function which calling method itself. the java recursion factorial example demonstrate recursive function call to find factorial. In mathematics, factorial is defined as n! = n*(n-1)…2*1. e.g. If we want to calculate factorial of 10 , then its factorial value is (10*9*8*7*6*5*4*3*2*1) = 3628800.
Here is the Java Example for the program JavaFactorialUsingRecursion :
import java.util.Scanner; public class JavaFactorialUsingRecursion { static int fact(int a) { if(a <= 1) return 1; else return a * fact(a-1); } public static void main(String args[]) { try { System.out.println("Enter a number to find factorial"); Scanner scan = new Scanner(System.in); int n = scan.nextInt(); int Factorial = fact(n); System.out.println("Calculated Factorial of the number is: " + Factorial); } catch (Exception e){} } }
Output of program
When, the method fact(5) is invoked, the value 5 will be assigned to parameter a. It will return :
5*fact(4)
When fact(4) is called with the argument 4, the function fact is re-entered and a new set of local variables and parameters is allocated. This way, we have a different set of local variables and parameters for each call of the function. While referencing, only the most recent copy of these variables can be referenced. When a return from fact takes place, the most recent allocation of these variables is freed, and the previous copy is reactivated.
To manage these different set of variables and parameters, stack is used. So 5*fact(4) is placed on the stack.
When fact(4) is called, a new set of variables is created i.e. a new variable a is created and is assigned value 4. It will call 4*fact(3).The call to fact(3) will force 4*fact(3) to be pushed on the stack above 5*fact(4):
When fact(3) is called, a new variable a is created and is assigned value 3. It will push 3*fact(2) onto the stack and call to the function fact is placed with the parameter value 2.
When fact(2) is called, the value 2 is assigned to a. It will push 2*fact(1) onto the stack
When fact(l) is called, the value 1 is assigned to a. It will return 1.
When the function returns, the stack is popped i.e. the top allocation is freed and the previous allocation becomes the current stack top.
Itcan be shown as :
5*fact(4)
4*fact(3)
3*fact(2)
2*fact(1)
1
Hence combining all will return 5*4*3*2*1 i.e. 120