Open In App
Related Articles

Traverse a given Matrix using Recursion

Improve Article
Improve
Save Article
Save
Like Article
Like

Given a matrix arr of size N x M, the task is to traverse this matrix using recursion.
Examples: 

Input: arr[][] = {{1, 2, 3}, 
                  {4, 5, 6},
                  {7, 8, 9}} 
Output: 1, 2, 3, 4, 5, 6, 7, 8, 9

Input: M[][] = {{11, 12, 13}, 
                  {14, 15, 16}, 
                  {17, 18, 19}}
Output: 11, 12, 13, 14, 15, 16, 17, 18, 19

Approach: 

  • Check If the current position is in the bottom-right corner of the matrix
    • Print the value at that position
    • End the recursion
  • Print the value at the current position
  • Check If the end of the current row has not been reached
    • Move right
  • Check If the end of the current column has been reached
    • Move down to the next row

Below is the implementation of the above approach: 

C++




#include <iostream>
 
using namespace std;
 
// Define the dimensions of the matrix
const int N = 3;
const int M = 3;
 
// Recursive function to traverse the matrix
void traverse(int arr[][M], int i, int j)
{
    // If the current position is the bottom-right corner of
    // the matrix
    if (i == N - 1 && j == M - 1) {
        // Print the value at that position
        cout << arr[i][j] << endl;
        // End the recursion
        return;
    }
 
    // Print the value at the current position
    cout << arr[i][j] << ", ";
 
    // If the end of the current row has not been reached
    if (j < M - 1) {
        // Move right
        traverse(arr, i, j + 1);
    }
    // If the end of the current column has been reached
    else if (i < N - 1) {
        // Move down to the next row
        traverse(arr, i + 1, 0);
    }
}
 
int main()
{
    // Define the matrix
    int arr[N][M]
        = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
 
    // Start the traversal from the top-left corner of the
    // matrix
    traverse(arr, 0, 0);
 
    return 0;
}


Java




public class MatrixTraversal {
    // Define the dimensions of the matrix
    private static final int N = 3;
    private static final int M = 3;
 
    // Recursive function to traverse the matrix
    private static void traverse(int[][] arr, int i, int j) {
        // If the current position is the bottom-right corner of
        // the matrix
        if (i == N - 1 && j == M - 1) {
            // Print the value at that position
            System.out.println(arr[i][j]);
            // End the recursion
            return;
        }
 
        // Print the value at the current position
        System.out.print(arr[i][j] + ", ");
 
        // If the end of the current row has not been reached
        if (j < M - 1) {
            // Move right
            traverse(arr, i, j + 1);
        }
        // If the end of the current column has been reached
        else if (i < N - 1) {
            // Move down to the next row
            traverse(arr, i + 1, 0);
        }
    }
 
    public static void main(String[] args) {
        // Define the matrix
        int[][] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
 
        // Start the traversal from the top-left corner of the
        // matrix
        traverse(arr, 0, 0);
    }
}


Python3




# Define the dimensions of the matrix
N = 3
M = 3
 
# Recursive function to traverse the matrix
def traverse(arr, i, j):
    # If the current position is the bottom-right corner of
    # the matrix
    if i == N - 1 and j == M - 1:
        # Print the value at that position
        print(arr[i][j])
        # End the recursion
        return
 
    # Print the value at the current position
    print(arr[i][j], end=", ")
 
    # If the end of the current row has not been reached
    if j < M - 1:
        # Move right
        traverse(arr, i, j + 1)
    # If the end of the current column has been reached
    elif i < N - 1:
        # Move down to the next row
        traverse(arr, i + 1, 0)
 
# Define the matrix
arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
 
# Start the traversal from the top-left corner of the
# matrix
traverse(arr, 0, 0)
 
# This code is contributed by Prince Kumar


C#




// C# program for the above approach
using System;
 
public class Program
{
    // Define the dimensions of the matrix
    private const int N = 3;
    private const int M = 3;
 
    // Recursive function to traverse the matrix
    private static void Traverse(int[,] arr, int i, int j)
    {
        // If the current position is the bottom-right corner of
        // the matrix
        if (i == N - 1 && j == M - 1)
        {
            // Print the value at that position
            Console.WriteLine(arr[i, j]);
            // End the recursion
            return;
        }
 
        // Print the value at the current position
        Console.Write($"{arr[i, j]}, ");
 
        // If the end of the current row has not been reached
        if (j < M - 1)
        {
            // Move right
            Traverse(arr, i, j + 1);
        }
        // If the end of the current column has been reached
        else if (i < N - 1)
        {
            // Move down to the next row
            Traverse(arr, i + 1, 0);
        }
    }
 
    public static void Main()
    {
        // Define the matrix
        int[,] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
 
        // Start the traversal from the top-left corner of the
        // matrix
        Traverse(arr, 0, 0);
    }
}
 
// This code is contributed by Prince Kumar


Javascript




// Define the dimensions of the matrix
const N = 3;
const M = 3;
let ans="";
 
// Recursive function to traverse the matrix
function traverse(arr, i, j)
{
 
  // If the current position is the bottom-right corner of
  // the matrix
  if (i === N - 1 && j === M - 1)
  {
   
    // Print the value at that position
    ans =ans + arr[i][j];
     
    // End the recursion
    return;
  }
 
  // Print the value at the current position
  ans =ans + arr[i][j]+", ";
 
  // If the end of the current row has not been reached
  if (j < M - 1)
  {
   
    // Move right
    traverse(arr, i, j + 1);
  }
   
  // If the end of the current column has been reached
  else if (i < N - 1)
  {
   
    // Move down to the next row
    traverse(arr, i + 1, 0);
  }
}
 
// Define the matrix
const arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
 
// Start the traversal from the top-left corner of the
// matrix
traverse(arr, 0, 0); console.log(ans);


Output

1, 2, 3, 4, 5, 6, 7, 8, 9

Time Complexity: O(N * M)
Auxiliary Space: O(M), because of recursive calling


Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Last Updated : 09 Mar, 2023
Like Article
Save Article
Similar Reads
Related Tutorials