You are currently viewing Recursion in Python

Recursion in Python

Hello tech enthusiasts, welcome back to my latest blog post on bittutech.com! Today, we’re going to dive into one of the most crucial concept in the Python programming: Recursion.

Let’s explore how recursion works in Python and why it’s a fundamental technique to master.

What is Recursion?

Recursion is a programming technique where a function calls itself repeatedly either directly or indirectly until a base condition is met. The function solves a smaller instance of the same problem, which eventually leads to the solution of the original problem.

In simple language, recursion is a type of process which is done so that we can solve our biggest problems and biggest code into smaller ones and also save our time

The recursive function has two essential components:-

  • Base case: A trivial case that can be solved directly, without recursive calls.
  • Recursive case: A case that breaks down the problem into smaller sub-problems, solved by recursive calls.

Let’s consider the example of a recursive function to calculate the factorial of a number to the better understanding of Base case and Recursive case.

def factorial(n):
    # Base Case
    if n == 0 or n == 1:
        return 1
   
    # Recursive Case
    else:
        return n *  factorial(n-1)

Base Case:-

– The base case is the condition that stops the recursion.
– In this example, the base case is when `n` equals 0 or 1.
– When `n` is 0 or 1, the function returns 1, as the factorial of 0 and 1 is 1.

Recursive Case:-

– The recursive case is the condition that calls the function itself.
– In this example, the recursive case is when `n` is greater than 1.
– The function calls itself with the argument `n-1` and multiplies the result by `n`.

How this code works:-

1. Let’s consider 4 as example to execute the code…`factorial(4)` is called.
2. `n` is 4, so the recursive case is executed.
3. `factorial(3)` is called.
4. `n` is 3, so the recursive case is executed.
5. `factorial(2)` is called.
6. `n` is 2, so the recursive case is executed.
7. `factorial(1)` is called.
8. `n` is 1, so the base case is executed.
9. `factorial(1)` returns 1.
10. The results are returned and multiplied: 1*2*3*4 = 24.

Result:-

The final result of `factorial(4)` is 24.

How Recursion Works in Python :-

In Python, a recursive function calls itself using the same function name. The function has a base case that stops the recursion, and a recursive case that breaks down the problem into smaller sub-problems.

Here’s a step-by-step explanation of how recursion works in Python:

Example:- Fibonacci Series :- Each number = sum of previous two numbers

Code:-

def fibonacci(n):
# Base case
if n <= 1: return n else: # Recursive case return fibonacci(n-1) + fibonacci(n-2) # Print Fibonacci series up to n terms n = 6 for i in range(n): print(fibonacci(i), end=" ")

Step-by-Step Explanation of the Above code to understand that how recursion programs works. Let’s started…

1. Function Definition:
def fibonacci(n):
– Defines a function that takes an integer n as input.
– It represents the position in the Fibonacci sequence.

2. Base Case:
- if n <= 1: return n

– If n is 0 or 1, return the value directly.
– This prevents infinite recursion.

3. Recursive Case:
return fibonacci(n-1) + fibonacci(n-2)
– Function calls itself with smaller values.
– Adds results of previous two positions.

4. Loop for Printing Series:
for i in range(n):
– Runs the function from 0 to n-1
– Prints Fibonacci numbers in sequence.

Working Example (n = 4)
👇🏻…
fibonacci(4)
fibonacci(3) + fibonacci(2)
(fibonacci(2) + fibonacci(1)) + (fibonacci(1) + fibonacci(0))
(1 + 1) + (1 + 0)
2 + 1 = 3

Final Result :- 0 1 1 2 3 5

This step-by-step explanation illustrates how recursion works in Python:👇🏻👇🏻

1. Function invocation and call stack management.
2. Base case checking.
3. Recursive calls.
4. Unwinding and returning values.

Advantages of solving python programs through Recursion method

Example: Calculating Factorial of 5.

The logic is: 5 *4* 3*2*1 = 120

With Recursion Method

In recursion, we define the factorial of n as n* factorial(n-1). We keep “drilling down” until we hit the base case (1).

It’s elegant and mirrors the mathematical definition. The “work” is handled by the function calling itself and pausing until the next layer returns a value.

Without Recursion Method

In the iterative approach, we use a loop to manually multiply the numbers one by one and store the result in a “container” variable.

It’s more “manual.” You have to create a variable (result), manage a loop, and update that variable at every step. While it takes more lines of logic, it’s often more memory-efficient for very large numbers in Python.

Side-by-Side Comparison

FeatureWith Recursion MethodWithout Recursion (Iterative)
Code ClarityClean & Elegant: The code often looks like the mathematical definition of the problem.Functional but Bulky: Requires managing loop counters, increments, and state variables.
Problem ComplexityIdeal for Nested Structures: Perfect for traversing trees, graphs, or directories.Difficult for Branching: Navigating deep, non-linear data structures with loops is often messy.
Logic StyleDeclarative: You focus on what the solution is (the base case + the relationship).Imperative: You focus on how to step through the solution manually.
State ManagementAutomatic: Python’s call stack handles the state of variables at each level for you.Manual: You must explicitly update and track variables (like i, total, etc.) in each iteration.

Why Choose Recursion?

1. Reduced Code Length Recursive functions are generally shorter. For example, traversing a complex file system or a JSON object with unknown depth can take dozens of lines of iterative code, but only 4 or 5 lines with recursion.

2. Direct Implementation of Algorithms Many famous algorithms (like QuickSort, MergeSort, or Fibonacci sequences) are defined recursively in mathematics. Translating these into Python is much more intuitive using the recursion method because the code matches the logic.

NOTE: While recursion is elegant, remember that Python has a default recursion limit (usually 1,000 calls). If your “Without Recursion” method is dealing with millions of items, it might be the safer bet to avoid a RecursionError!

Last Word:- The secret to being a great Python developer isn’t just knowing how to use recursion—it’s knowing when the simplicity of a loop is actually the smarter choice.

Share post

Prajjwal Singh

Tech Blogger || Web developer || Computer Networking Enthusiast || Microsoft SQL Database Management Expert || Software Debugger || Learned DOS OS Structure

Leave a Reply