**Python Recursive Function:**

Recursion is the process of defining something in terms of itself. We know that in Python, a function can call other functions. It is even possible for the function to call itself. These type of construct are termed as recursive functions.

- Following is an example of recursive function to find the factorial of an integer.
- Factorial of a number is the product of all the integers from 1 to that number.
- For example, the factorial of 6 (denoted as 6!) is 1*2*3*4*5*6 = 720.
- Example: In this example, factorial() is a recursive functions as it calls itself.

def factorial(x):

if x == 1:

return 1

else:

return (x * factorial(x-1))

if x == 1:

return 1

else:

return (x * factorial(x-1))

num = 6

print(“The factorial of”, num, “is”, factorial(num))

**Advantages of Recursion:**

- Recursive functions make the code look clean and elegant.
- A complex task can be broken down into simpler sub-problems using recursion.
- Sequence generation is easier with recursion than using some nested iteration.

**Disadvantages of Recursion:**

- Sometimes the logic behind recursion is hard to follow through.
- Recursive calls are expensive (inefficient) as they take up a lot of memory and time.
- Recursive functions are hard to debug.

**Python Anonymous function (AKA Lambda Function):**

In Python, anonymous function is a function that is defined without a name. Python anonymous functions are defined using the lambda keyword. Hence, anonymous functions are also called lambda functions.

**Syntax of Lambda Function in python**

**lambda arguments: expression**

- Lambda functions can have any number of arguments but only one expression.
- The expression is evaluated and returned.
- Lambda functions can be used wherever function objects are required.
- Example of Lambda Function in python

double = lambda x: x * 2

print(double(5)) # Output: 10

print(double(5)) # Output: 10

- In the above program, lambda x: x * 2 is the lambda function.
- Here x is the argument and x * 2 is the expression that gets evaluated and returned.
- This function has no name.
- It returns a function object which is assigned to the identifier double.

**Use of Lambda Function in python:**

- We use lambda functions when we require a nameless function for a short period of time.In Python, we generally use it as an argument to a higher-order function (a function that takes in other functions as arguments).
- Lambda functions are used along with built-in functions like filter(), map() etc.

**Example:**

my_list = [1, 5, 4, 6, 8, 11, 3, 12]

new_list = list(filter(lambda x: (x%2 == 0) , my_list))

print(new_list)

**# Output:**

[4, 6, 8, 12]

- The filter() function in Python takes in a function and a list as arguments.
- The function is called with all the items in the list and a new list is returned which contains items for which the function evaluates to
**True**. - Here is an example use of filter() function to filter out only even numbers from a list.

**Example use with map():**

- The map() function in Python takes in a function and a list.
- The function is called with all the items in the list and a new list is returned which contains items returned by that function for each item.
- Here is an example use of map() function to double all the items in a list.

my_list = [1, 5, 4, 6, 8, 11, 3, 12]

new_list = list(map(lambda x: x * 2 , my_list))

print(new_list) à

# Output:

[2, 10, 8, 12, 16, 22, 6, 24]