Problems On Recursion

·

4 min read

Problems On Recursion

The best way to learn something is by working on it. You can grasp recursion better by solving more problems. As you tackle different challenges, you'll learn how recursion works, when to stop, and how to break big problems into smaller ones. This helps you understand and solve problems more effectively, boosting your confidence in using recursion in programming.

1. Factorial Calculation

Write a recursive function to calculate the factorial of a positive integer n.

def factorial(n):
    if n == 0:
        return 1
    return n * factorial(n - 1)

2. Fibonacci Series

Implement a recursive function to generate the n-th term of the Fibonacci series.

def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

3. Sum of Digits

Create a recursive function to find the sum of the digits of a given positive integer n.

def sum_of_digits(n):
    if n == 0:
        return 0
    return n % 10 + sum_of_digits(n // 10)

4. Power Calculation

Develop a recursive function to compute the result of raising a base number x to a non-negative integer power n.

def power(x, n):
    if n == 0:
        return 1
    return x * power(x, n - 1)

5. Array Sum

Craft a recursive function to calculate the sum of all elements in a given array.

def array_sum(arr, index):
    if index == len(arr):
        return 0
    return arr[index] + array_sum(arr, index + 1)

6. Palindrome Check

Write a recursive function to determine if a given string is a palindrome, considering characters both forward and backward.

def is_palindrome(s, left, right):
    if left >= right:
        return True
    if s[left] != s[right]:
        return False
    return is_palindrome(s, left + 1, right - 1)

Implement a binary search algorithm using recursion on a sorted array.

def binary_search(arr, target, left, right):
    if left > right:
        return -1
    mid = left + (right - left) // 2
    if arr[mid] == target:
        return mid
    elif arr[mid] < target:
        return binary_search(arr, target, mid + 1, right)
    else:
        return binary_search(arr, target, left, mid - 1)

8. Tower of Hanoi

Solve the classic Tower of Hanoi problem using recursion with three rods and n disks.

def tower_of_hanoi(n, source, auxiliary, target):
    if n > 0:
        tower_of_hanoi(n - 1, source, target, auxiliary)
        print(f"Move disk {n} from {source} to {target}")
        tower_of_hanoi(n - 1, auxiliary, source, target)

9. Backtracking Problems

Explore the realm of backtracking by tackling problems that lend themselves to recursive solutions. Examples include solving the N-Queens problem and generating all permutations of a set.

def is_safe(board, row, col, n):
    # Check if a queen can be placed in board[row][col]
    # Implement the safety checks as needed
    pass

def solve_n_queens(board, row, n):
    if row == n:
        # Found a solution, process the board
        pass
    for col in range(n):
        if is_safe(board, row, col, n):
            board[row][col] = 1
            if solve_n_queens(board, row + 1, n):
                return True
            board[row][col] = 0
    return False

10. Linked List Reversal

Reverse a linked list using a recursive approach, enhancing your understanding of recursion's application in data structures.

class Node:
    def __init__(self, value):
        self.value = value
        self.next = None

def reverse_linked_list(head):
    if head is None or head.next is None:
        return head
    rest = reverse_linked_list(head.next)
    head.next.next = head
    head.next = None
    return rest

Benefits of Solving Recursion Problems

Deeper Problem-Solving Understanding: Recursion compels you to deconstruct intricate problems into more manageable components, fostering a profound comprehension of the entire problem-solving process.

Enhanced Logical Acumen: Recursion cultivates logical thinking and deepens your grasp of the intricate connections among various facets of a problem.

Strengthened Algorithmic Aptitude: Solving recursion problems sharpens your algorithmic thinking, an essential trait for surmounting intricate programming hurdles.

Versatile Problem-Solving Tool: Recursion is an adaptable technique employed across various programming paradigms, including divide and conquer, backtracking, and dynamic programming.

Interview Readiness: Numerous technical interviews encompass recursion-themed inquiries. Mastering these problems will set you up for success in coding interviews and bolster your overall programming expertise.