Open In App

Difference between Recursion and Iteration

Last Updated : 11 Jul, 2025
Summarize
Comments
Improve
Suggest changes
Share
Like Article
Like
Report

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++
#include<iostream>
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;
}

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;
}
C
#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;
}

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;
}
Java
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;
    }

    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));
    }
}
Python
# ----- 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;

if __name__ == "__main__":
    num = 5;
    print("Factorial of",num,"using Recursion is:",
                    factorialUsingRecursion(5));

    print("Factorial of",num,"using Iteration is:",
                    factorialUsingIteration(5));
    
C#
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;
    }


    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));
    }
}
JavaScript
// ----- 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) {
    let res = 1;

    // using iteration
    for (let i = 2; i <= n; i++)
        res *= i;

    return res;
}

// Driver code
let num = 5;
console.log("Factorial of " + num + " using Recursion is: " +
            factorialUsingRecursion(num));

console.log("Factorial of " + num + " using Iteration is: " +
            factorialUsingIteration(num));
PHP
<?php

    // ----- 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");
    

?>

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

Difference between Iteration and Recursion

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

Property

Recursion

Iteration

DefinitionFunction calls itself.A set of instructions repeatedly executed.
ApplicationCertain problems can be solved quite easily using recursion like Towers of Hanoi (TOH), Inorder/Preorder/Postorder Tree Traversals, DFS of Graph, etc.In general iterative solutions are preferred over recursive solutions as there is no extra overhead required for recursion.
TerminationThrough base case, where there will be no function call.When the termination condition for the iterator ceases to be satisfied.
UsageUsed in academics to teach foundations and logic. Also works as a foundation for Dynamic Programming and Divide and Conquer algorithms.Preferred in general.
Code SizeCan be smaller code size for inherently recursive problems.Can be larger for naturally recursive problems.

Time Complexity

In general time complexity is higher or same. The time complexity especially become higher for the problems that can be optimized using dynamic programming

Lower or same.

Space ComplexityIn general, the auxiliary space is either higher. Can be same in same cases where we need an explicit stack to simulate recursion like tree traversals, merge sort, etc.Generally lower
OverheadPossesses overhead of repeated function calls.No overhead as there are no function calls in iteration.

Introduction of Recursion
Visit Course explore course icon
Video Thumbnail

Introduction of Recursion

Video Thumbnail

Application's of Recursion

Video Thumbnail

Writing base case in Recursion

Next Article

Similar Reads