In this tutorial, we will discuss what are recursive functions and how to create them in python and why we need them. so let’s discuss Python Recursion.

## Python Recursion

**What are recursive functions?**

Until now we were defining a function and at the time of execution, we were calling it from outside the function. What if we call the function inside the function? it will create a kinda loop that what recursion functions are all about.

A recursive function is that function which can call itself during execution. For example, when a function body has a statement in which it is calling itself then that function will be termed as a recursive function.

We have said that recursion act like loops what can perform repetitive work so there should be a base condition that stops that repetitive statement and give a result or else you will get trap in the infinite loop.

**Python recursive Function**

There are many examples in which a function calls another function but those are not recursive function only those functions are recursive functions which can call themselves.

Finding factorial of a number is one of the classical examples of recursive functions.

If you do not know what a factorial is let’s understand it first. Factorial is a Math concept which denoted by an exclamation mark (!). if you want the factorial of 5 you would write 5! And the solution of the factorial would be

5!= 5 x 4 x 3 x 2 x 1 = 120

And for note 1! =1 and 0! =1

**Let’s code the factorial in python**

def fact(n): if n==1 or n==0: #Base condition return 1 else: return n * fact(n-1) # recursion function calling num=7 print("the factorial of" ,num, "is ", fact(num)) #function calling

#Output

the factorial of 7 is 5040

**Behind the code:**

In the above example to execute the function **fact**(), we call it from outside the function then the value of variable **num** gets assigned to the function argument **n** and function gets started to execute when the argument **n **does not satisfy the **if **statement the **else **statement gets executed. In the **else** statement we strike the recursive function and let’s see how does it work.

fact(n) #main function return 7 * fact(6) #recursive function first call return 7 * 6 *fact(5) #recursive function 2^{nd}call (the value of fact(6) is 6 * fact(5)) return 7*6*5*fact(4) #recursive function 3^{rd}call return 7*6*5*4 *fact(3) #recursive function 4^{th}call return 7*6*5*4*3*fact(2) #recursive function 5^{th}call return 7*6*5*4*3*2*fact(1) #recursive function 6^{th}call return 7*6*5*4*3*2*1 #recursive function 7^{th}call

that how at last it returns a value 7*6*5*4*3*2*1 and we get an output 5040. Here you can see that the base condition play a significant role what if we did not pass the base condition the number kept on decreasing and it could make an infinite recursive call.

**Pro and Cons of recursive function:**

**Advantages:**

- With recursion function, the code looks neat
- It divides the functionality into smaller parts which make the programme easy to understand
- It comes very usefully with the binary trees data structure

**Disadvantages:**

- It’s very difficult to understand the logic behind every recursive function.
- A recursive function is slow as compare to the iterators.
- it occupies a lot of memory because we are executing the same function again and again
- it is very hard to debug the recursive function.
- With a big set of data, recursive functions are not useful