Difference between Recursion and Iteration

Last Updated : 23 Oct, 2025

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

  • In recursion, a function calls itself to solve smaller parts of a given problem. It continues until a base condition is met to stop further calls.
  • Iteration means repeatedly executing a set of instructions using loops like for, while, or do-while. It continues until a specified condition becomes false.
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;
    return n * factorialUsingRecursion(n - 1);
}

// ----- Iteration -----
// Method to find the factorial of a given number
int factorialUsingIteration(int n)
{
    int res = 1, i;

    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

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 ComplexityAuxiliary space is either higher or same. 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.
Comment