Difference between Recursion and Iteration

Last Updated : 17 Jun, 2026

Recursion and iteration are two widely used techniques for solving repetitive problems in programming. Both can often produce the same result, but they differ in how repetition is achieved and how system resources are utilized.

  • Both approaches can be used to solve repetitive and computational problems.
  • They differ in implementation, memory usage, and performance characteristics.

Recursion

Recursion is a technique in which a function calls itself to solve smaller instances of the same problem.

  • Uses function calls to repeat a task.
  • Requires a base case to terminate execution.

Iteration

Iteration is a technique that repeatedly executes a block of code using loops such as for, while, or do-while.

  • Uses loop constructs for repetition.
  • Generally consumes less memory than recursion.
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

Explanation: Both approaches produce the same result. The recursive solution repeatedly calls itself until the base case is reached, whereas the iterative solution uses a loop to compute the factorial.

Recursion Vs Iteration

FeatureRecursionIteration
DefinitionA function calls itself to solve a problem.A loop repeatedly executes a set of statements.
TerminationStops when the base case is reached.Stops when the loop condition becomes false.
ImplementationUses function calls.Uses loops such as for, while, or do-while.
Memory UsageRequires additional stack space.Generally uses less memory.
PerformanceMay be slower due to function call overhead.Usually faster for equivalent solutions.
Code ReadabilityOften simpler for recursive problems.Usually simpler for straightforward repetition.
RiskCan cause stack overflow if recursion is too deep.No recursion-related stack overflow risk.
ApplicationsTree traversals, DFS, Divide and Conquer.Counting, searching, and repetitive computations.
Comment