Open In App

Traverse a given Matrix using Recursion

Improve
Improve
Like Article
Like
Save
Share
Report

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



Last Updated : 09 Mar, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads