DEV Community

Cover image for Recursion in c'
Fonyuy Gita
Fonyuy Gita

Posted on

Recursion in c'

Recursion in C: Unraveling the Fun 🔄

a_picture_of_a_computer_on_it_that_picturizes_recursion_c_programming_language (1)

Recursion is a fascinating concept in computer programming that often leaves beginners scratching their heads. 🤔 Fear not! In this blog post, we'll embark on an exciting journey to demystify recursion in the C programming language. 🚀 We'll explore various code snippets, discuss named algorithms that utilize recursion, and provide real-life analogies to make the learning experience enjoyable. Let's dive in! 💡

Understanding the Basics: Code Snippets

Code Snippet 1: Countdown ⏱️

#include <stdio.h>

void countdown(int n) {
    if (n <= 0) {
        printf("Blastoff! 🚀\n");
    } else {
        printf("%d... ", n);
        countdown(n - 1);
    }
}

int main() {
    int num = 5;
    countdown(num);
    return 0;
}
Enter fullscreen mode Exit fullscreen mode

In this snippet, we define a function countdown that takes an integer n as an input. It prints the value of n and recursively calls countdown with n - 1. When n reaches 0 or less, it prints "Blastoff! 🚀". By running countdown(5), we obtain the following

output:

5... 4... 3... 2... 1... Blastoff! 🚀
Enter fullscreen mode Exit fullscreen mode

Real-Life Analogies

To better grasp the concepts behind recursion, let's explore some real-life analogies:
Imagine you're standing at the edge of a launching pad, counting down before a rocket takes off.

Image

Each time you say a number, you move closer to the blastoff moment. Similarly, in recursion, each recursive call brings you closer to reaching the base case.

Code Snippet 2: Factorial 🔢

#include <stdio.h>

int factorial(int n) {
    if (n == 0) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

int main() {
    int num = 5;
    int result = factorial(num);
    printf("Factorial of %d is %d\n", num, result);
    return 0;
}
Enter fullscreen mode Exit fullscreen mode

Here, we define a function factorial that calculates the factorial of a given number n using recursion. When n equals 0, it returns 1 (the base case). Otherwise, it multiplies n by the factorial of n - 1. By running factorial(5), we obtain the following output

output:

Factorial of 5 is 120
Enter fullscreen mode Exit fullscreen mode

Real Life Analogy

Consider a stack of boxes, where each box represents a number. To calculate the factorial of a number, you multiply the number on the top box with the value obtained from the stack below it. This process continues until you reach the base case (the bottom box with a value of 1).

Code Snippet 3: Fibonacci Sequence 🐇

#include <stdio.h>

int fibonacci(int n) {
    if (n <= 1) {
        return n;
    } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

int main() {
    int num = 7;
    int result = fibonacci(num);
    printf("Fibonacci number at position %d is %d\n", num, result);
    return 0;
}
Enter fullscreen mode Exit fullscreen mode

In this snippet, the function fibonacci uses recursion to calculate the Fibonacci number at position n. If n is less than or equal to 1, it returns n (the base case). Otherwise, it returns the sum of the Fibonacci numbers at positions n - 1 and n - 2. By running fibonacci(7), we obtain the following

output:

Fibonacci number at position 7 is 13
Enter fullscreen mode Exit fullscreen mode

Real Life Analogy:

Picture a rabbit population in which each pair of rabbits produces another pair in the next generation. The number of rabbits in each generation depends on the previous two generations. This recursive relationship mirrors the Fibonacci sequence.

Code Snippet 4: Binary Search 🎯

#include <stdio.h>

int binarySearch(int arr[], int low, int high, int target) {
    if (low > high) {
        return -1;
    } else {
        int mid = (low + high) / 2;
        if (arr[mid] == target) {
            return mid;
        } else if (arr[mid] > target) {
            return binarySearch(arr, low, mid - 1, target);
        } else {
            return binarySearch(arr, mid + 1, high, target);
        }
    }
}

int main() {
    int arr[] = {2, 4, 6, 8, 10, 12, 14, 16};
    int target = 10;
    int size = sizeof(arr) / sizeof(arr[0]);
    int result = binarySearch(arr, 0, size - 1, target);
    if (result == -1) {
        printf("Target not found! ❌\n");
    } else {
        printf("Target found at index %d\n", result);
    }
    return 0;
}
Enter fullscreen mode Exit fullscreen mode

Here, the function binarySearch performs a binary search for a target value within a sorted array. If low becomes greater than high, it means the target is not present (base case). Otherwise, it compares the target with the middle element of the array and recursively calls binarySearch on either the left or right halfof the array, depending on the comparison result. By running binarySearch(arr, 0, size - 1, 10), we obtain the following

output:

Target found at index 4
Enter fullscreen mode Exit fullscreen mode

Code Snippet 5: Tower of Hanoi 🗼

#include <stdio.h>

void towerOfHanoi(int n, char source, char auxiliary, char destination) {
    if (n == 1) {
        printf("Move disk 1 from %c to %c\n", source, destination);
    } else {
        towerOfHanoi(n - 1, source, destination, auxiliary);
        printf("Move disk %d from %c to %c\n", n, source, destination);
        towerOfHanoi(n - 1, auxiliary, source, destination);
    }
}

int main() {
    int numDisks = 3;
    towerOfHanoi(numDisks, 'A', 'B', 'C');
    return 0;
}
Enter fullscreen mode Exit fullscreen mode

In this final snippet, we implement the Tower of Hanoi puzzle using recursion. The towerOfHanoi function takes the number of disks n, and the names of the source, auxiliary, and destination pegs as inputs. If n equals 1, it directly moves the disk from the source to the destination. Otherwise, it recursively solves the puzzle by moving n-1 disks from the source to the auxiliary peg, then moves the largest disk from the source to the destination, and finally moves the n-1 disks from the auxiliary to the destination peg. By running towerOfHanoi(3, 'A', 'B', 'C'), we obtain the following

output:

Move disk 1 from A to C
Move disk 2 from A to B
Move disk 1 from C to B
Move disk 3 from A to C
Move disk 1 from B to A
Move disk 2 from B to C
Move disk 1 from A to C
Enter fullscreen mode Exit fullscreen mode

Real Life Analogy:

Imagine three pegs with disks of different sizes stacked on one peg. Your goal is to move all the disks to another peg, following the rules of the Tower of Hanoi puzzle.


Image

You can use an intermediary peg to facilitate the movements. Recursion comes into play as you recursively solve the puzzle for a smaller number of disks.

By relating these programming concepts to real-life scenarios, you can gain a deeper understanding of recursion and its applications. 🌟

Congratulations on completing this adventurous journey through recursion in the C programming language! We hope this blog post has demystified the concept and sparked your curiosity to explore further. Remember, with practice and a curious mindset, you'll master recursion and unlock its hidden powers. 🚀 Keep coding! 💻✨

Top comments (0)