Open In App

Difference between Recursion and Iteration

A program is called recursive when an entity calls itself. A program is called iterative when there is a loop (or repetition).

Example: Program to find the factorial of a number 






// C program to find factorial of given number
#include <stdio.h>
 
// ----- Recursion -----
// method to find factorial of given number
int factorialUsingRecursion(int n)
{
    if (n == 0)
        return 1;
 
    // recursion call
    return n * factorialUsingRecursion(n - 1);
}
 
// ----- Iteration -----
// Method to find the factorial of a given number
int factorialUsingIteration(int n)
{
    int res = 1, i;
 
    // using iteration
    for (i = 2; i <= n; i++)
        res *= i;
 
    return res;
}
 
// Driver method
int main()
{
    int num = 5;
    printf("Factorial of %d using Recursion is: %d\n", num,
           factorialUsingRecursion(5));
 
    printf("Factorial of %d using Iteration is: %d", num,
           factorialUsingIteration(5));
 
    return 0;
}
 
// This code is contributed by mits




// C++ program to find factorial of given number
#include<bits/stdc++.h>
using namespace std;
 
// ----- Recursion -----
// method to find factorial of given number
int factorialUsingRecursion(int n)
{
    if (n == 0)
        return 1;
 
    // recursion call
    return n * factorialUsingRecursion(n - 1);
}
 
// ----- Iteration -----
// Method to find the factorial of a given number
int factorialUsingIteration(int n)
{
    int res = 1, i;
 
    // using iteration
    for (i = 2; i <= n; i++)
        res *= i;
 
    return res;
}
 
// Driver method
int main()
{
    int num = 5;
    cout << "Factorial of " << num <<
            " using Recursion is: " <<
            factorialUsingRecursion(5) << endl;
 
    cout << "Factorial of " << num <<
            " using Iteration is: " <<
            factorialUsingIteration(5);
 
    return 0;
}
 
// This code is contributed by mits




// Java program to find factorial of given number
class GFG {
 
    // ----- Recursion -----
    // method to find factorial of given number
    static int factorialUsingRecursion(int n)
    {
        if (n == 0)
            return 1;
 
        // recursion call
        return n * factorialUsingRecursion(n - 1);
    }
 
    // ----- Iteration -----
    // Method to find the factorial of a given number
    static int factorialUsingIteration(int n)
    {
        int res = 1, i;
 
        // using iteration
        for (i = 2; i <= n; i++)
            res *= i;
 
        return res;
    }
 
    // Driver method
    public static void main(String[] args)
    {
        int num = 5;
        System.out.println("Factorial of " + num
                           + " using Recursion is: "
                           + factorialUsingRecursion(5));
 
        System.out.println("Factorial of " + num
                           + " using Iteration is: "
                           + factorialUsingIteration(5));
    }
}




# Python3 program to find factorial of given number
 
# ----- Recursion -----
# method to find factorial of given number
def factorialUsingRecursion(n):
    if (n == 0):
        return 1;
 
    # recursion call
    return n * factorialUsingRecursion(n - 1);
 
# ----- Iteration -----
# Method to find the factorial of a given number
def factorialUsingIteration(n):
    res = 1;
 
    # using iteration
    for i in range(2, n + 1):
        res *= i;
 
    return res;
 
# Driver method
num = 5;
print("Factorial of",num,"using Recursion is:",
                    factorialUsingRecursion(5));
 
print("Factorial of",num,"using Iteration is:",
                    factorialUsingIteration(5));
     
# This code is contributed by mits




// C# program to find factorial of
// given number
using System;
 
class GFG
{
 
    // ----- Recursion -----
    // method to find factorial of
    // given number
    static int factorialUsingRecursion(int n)
    {
        if (n == 0)
            return 1;
 
        // recursion call
        return n * factorialUsingRecursion(n - 1);
    }
 
    // ----- Iteration -----
    // Method to find the factorial of
    // a given number
    static int factorialUsingIteration(int n)
    {
        int res = 1, i;
 
        // using iteration
        for (i = 2; i <= n; i++)
            res *= i;
 
        return res;
    }
 
    // Driver Code
    public static void Main(String[] args)
    {
        int num = 5;
        Console.WriteLine("Factorial of " + num +
                          " using Recursion is: " +
                          factorialUsingRecursion(5));
 
        Console.WriteLine("Factorial of " + num +
                          " using Iteration is: " +
                          factorialUsingIteration(5));
    }
}
 
// This code has been contributed by Rajput-Ji




<?php
// PHP program to find factorial of given number
 
    // ----- Recursion -----
    // method to find factorial of given number
    function factorialUsingRecursion($n)
    {
        if ($n == 0)
            return 1;
 
        // recursion call
        return $n * factorialUsingRecursion($n - 1);
    }
 
    // ----- Iteration -----
    // Method to find the factorial of a given number
    function factorialUsingIteration($n)
    {
        $res = 1;
 
        // using iteration
        for ($i = 2; $i <= $n; $i++)
            $res *= $i;
 
        return $res;
    }
 
    // Driver method
        $num = 5;
        print("Factorial of ".$num." using Recursion is: ".
                            factorialUsingRecursion(5)."\n");
 
        print("Factorial of ".$num." using Iteration is: ".
                            factorialUsingIteration(5)."\n");
     
// This code is contributed by mits
?>




<script>
 
// JavaScript program to find factorial of given number
// ----- Recursion -----
// method to find factorial of given number
function factorialUsingRecursion(n)
    {
        if (n == 0)
            return 1;
 
        // recursion call
        return n * factorialUsingRecursion(n - 1);
    }
 
    // ----- Iteration -----
    // Method to find the factorial of a given number
    function factorialUsingIteration(n)
    {
        var res = 1, i;
 
        // using iteration
        for (i = 2; i <= n; i++)
            res *= i;
 
        return res;
    }
 
    // Driver method
        var num = 5;
        document.write("Factorial of " + num
                           + " using Recursion is: "
                           + factorialUsingRecursion(5)+"<br>");
 
        document.write("Factorial of " + num
                           + " using Iteration is: "
                           + factorialUsingIteration(5));
     
// This code is contributed by shivanisinghss2110
</script>

Output
Factorial of 5 using Recursion is: 120
Factorial of 5 using Iteration is: 120

Time and Space Complexity

Time Complexity: O(2n)
Auxiliary Space: O(n)

Below is a detailed explanation to illustrate the difference between the two using the above example. We will study the different aspects of both recursive and iterative approaches.



1. Time Complexity

The time complexity of the method may vary depending on whether the algorithm is implemented using recursion or iteration.

2. Usage

Usage of either of these techniques is a trade-off between time complexity and size of code. If time complexity is the point of focus, and the number of recursive calls would be large, it is better to use iteration. However, if time complexity is not an issue and shortness of code is, recursion would be the way to go.

3. Overhead

Recursion has a large amount of Overhead as compared to Iteration. 

4. Infinite Repetition

Infinite Repetition in recursion can lead to a CPU crash but in iteration, it will stop when memory is exhausted. 

Difference between Iteration and Recursion

The following table lists the major differences between iteration and recursion:

Property

Recursion

Iteration

Definition Function calls itself. A set of instructions repeatedly executed.
Application For functions. For loops.
Termination Through base case, where there will be no function call. When the termination condition for the iterator ceases to be satisfied.
Usage Used when code size needs to be small, and time complexity is not an issue. Used when time complexity needs to be balanced against an expanded code size.
Code Size Smaller code size Larger Code Size.
Time Complexity Very high(generally exponential) time complexity. Relatively lower time complexity(generally polynomial-logarithmic).
Space Complexity The space complexity is higher than iterations. Space complexity is lower.
Stack Here the stack is used to store local variables when the function is called. Stack is not used.
Speed Execution is slow since it has the overhead of maintaining and updating the stack. Normally, it is faster than recursion as it doesn’t utilize the stack.
Memory  Recursion uses more memory as compared to iteration. Iteration uses less memory as compared to recursion.
Overhead Possesses overhead of repeated function calls. No overhead as there are no function calls in iteration.
Infinite Repetition If the recursive function does not meet to a termination condition or the base case is not defined or is never reached then it leads to a stack overflow error and there is a chance that the an system may crash in infinite recursion. If the control condition of the iteration statement never becomes false or the control variable does not reach the termination value, then it will cause infinite loop. On the infinite loop, it uses the CPU cycles again and again.

Article Tags :