**Factorial Definition: **Factorial is the result of multiplication of N number of consecutive integers from 1 to the N. In equations, it is symbolized by an exclamation mark “!”. For example, 5! = 1 * 2 * 3 * 4 * 5 = 120.

The factorial of a non-negative integer n, denoted by n!, is the product of all positive integers less than or equal to n. For example, 5!=5*4*3*2*1.

Remember, the value of 0! is 1, according to the convention for an empty product.

[codesyntax lang=”cpp” title=”C++ Program – Factorial using Recursion” bookmarkname=”C++ Program – Factorial using Recursion”]

#include <iostream.h> int factorial(int); void main(void) { int number; cout << "Please Enter a positive integer: "; cin >> number; if (number < 0) cout << "That is Not a positive integer! \n"; else cout << number << " factorial is: " << factorial(number) << endl; } int factorial(int number) { int temp; if(number <= 1) return 1; temp = number * factorial(number - 1); return temp; }

[/codesyntax]

## How This Program Works?

The above C++ Factorial program asks the user to enter a positive integer. If the number entered by user is negative (means less than 0, Zero) then the program displays a message “number is not a positive integer” else it calls the factorial().

Now the real calculation is done. The factorial function i.e. factorial() checks if the given number is equal to or less than 1 or not, if yes then it returns 1 to display factorial result as 1 otherwise recursion take place.

## What is Recursion? How this C++ Program Calculates Factorial?

In recursion, a function call itself and the called function again calls itself. Thus the same function is called again and again by itself until some condition terminates this. To understand recursion let’s take the above code example (Please first prepare yourself for this. Caution: Concentration Needed).

Suppose, we want to know the factorial of 3 using our C++ recursion program (that means number variable stores 3). The factorial function, **factorial(int number)** or **factorial(3)** will be called.

Now the function body of **factorial(3)** contains **temp= number*factorial(number-1)** which means **temp = 3*factorial(2) **to calculate factorial. Now look at this statement, the factorial function is called again in this statement (remember the recursion?) but with an argument 2 (which means number variable now stores 2).

Now again, **temp = number*factorial(number-1)** will be executed (remember number variable now stores 2) i.e. **temp = 2*Factorial(1)**.

Now, The function **factorial()** with an argument 1 is called (this means number variable now stores 1), but it will get terminated with a return value 1 as coded (see the if condition when number stores 1 or less). This value will be return 1 to **factorial(2)** (Note: return occurs in factorial(1) therefore this function terminates and returns to the function who called it, which is factorial(2)).

Now we have to back track our steps (please pay attention here), Suppose, function **factorial(2)** is running and is now at the statement **temp = ****2*Factorial(1),** which is equal to **temp = ****2*1** (remember factorial(1) returned 1). Now the result of multiplication (i.e. 2) will be stored in **temp** and this temp value will be returned to function **factorial(3).**

Now the function **factorial (3)** is executing and is at statement **temp = 3*Factorial(2)** which is equal **temp = 3*2**. Now the result of multiplication (i.e. 6) will be stored in temp variable and this temp value will be returned to function main() .

Huh! Now we had successfully calculated the factorial of 3 which is stored in **temp** (i.e. 6) and now the program control will be returned to calling function at the main(). The C++ statement **cout << number << ” factorial is: ” << factorial(number) << endl;** executes and factorial is displayed. Finished!

I know this was tricky but please read again. I had tried to make it simple and as detailed as possible. I hope this Factorial calculator Program is understandable. To understand this C++ program more clearly, do a little research on **function recursion** and read this again and again. I had tried my best to enlighten the working of program and its logic so study again.