Traverse a given Matrix using Recursion
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
Please Login to comment...