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, 9Input:M[][] = {{11, 12, 13}, {14, 15, 16}, {17, 18, 19}}Output:11, 12, 13, 14, 15, 16, 17, 18, 19

**Approach:** Below are the steps to traverse the Matrix recursively:

**Base Case:**If the current row or column exceeds the size N or M, respectively, the recursion is stopped.- If the current column exceeds the total number of columns M, then the next row is started.

if (current_col >= M) This row ends. Start for next row

- If the current row exceeds the total number of rows N, then the complete traversal is stopped.

if (current_row >= N) Matrix has been traversed completely

**Recursive Case:**In each recursive call,- The current element of the Matrix is printed.
- Two recursive calls are made:
- One to traverse the next row, and
- Another to traverse the next column.

Below is the implementation of the above approach:

## C++

`// C++ program to traverse the matrix recursively` `#include <iostream>` `using` `namespace` `std;` `#define N 2` `#define M 3` `// Function to traverse the matrix recursively` `int` `traverseMatrix(` `int` `arr[N][M], ` `int` `current_row,` ` ` `int` `current_col)` `{` ` ` `// If the entire column is traversed` ` ` `if` `(current_col >= M)` ` ` `return` `0;` ` ` `// If the entire row is traversed` ` ` `if` `(current_row >= N)` ` ` `return` `1;` ` ` `// Print the value of the current` ` ` `// cell of the matrix` ` ` `cout << arr[current_row][current_col] << ` `", "` `;` ` ` `// Recursive call to traverse the matrix` ` ` `// in the Horizontal direction` ` ` `if` `(traverseMatrix(arr, current_row,` ` ` `current_col + 1)` ` ` `== 1)` ` ` `return` `1;` ` ` `// Recursive call for changing the` ` ` `// Row of the matrix` ` ` `return` `traverseMatrix(arr,` ` ` `current_row + 1,` ` ` `0);` `}` `// Driver code` `int` `main()` `{` ` ` `int` `arr[N][M] = { { 1, 2, 3 },` ` ` `{ 4, 5, 6 } };` ` ` `traverseMatrix(arr, 0, 0);` ` ` `return` `0;` `}` |

## Java

`// Java program to traverse the matrix recursively` `class` `GFG {` ` ` ` ` `final` `static` `int` `N = ` `2` `;` ` ` `final` `static` `int` `M = ` `3` `;` ` ` ` ` `// Function to traverse the matrix recursively` ` ` `static` `int` `traverseMatrix(` `int` `arr[][], ` `int` `current_row,` ` ` `int` `current_col)` ` ` `{` ` ` `// If the entire column is traversed` ` ` `if` `(current_col >= M)` ` ` `return` `0` `;` ` ` ` ` `// If the entire row is traversed` ` ` `if` `(current_row >= N)` ` ` `return` `1` `;` ` ` ` ` `// Print the value of the current` ` ` `// cell of the matrix` ` ` `System.out.print(arr[current_row][current_col] + ` `", "` `);` ` ` ` ` `// Recursive call to traverse the matrix` ` ` `// in the Horizontal direction` ` ` `if` `(traverseMatrix(arr, current_row,` ` ` `current_col + ` `1` `)` ` ` `== ` `1` `)` ` ` `return` `1` `;` ` ` ` ` `// Recursive call for changing the` ` ` `// Row of the matrix` ` ` `return` `traverseMatrix(arr,` ` ` `current_row + ` `1` `,` ` ` `0` `);` ` ` `}` ` ` ` ` `// Driver code` ` ` `public` `static` `void` `main (String[] args)` ` ` `{` ` ` `int` `arr[][] = { { ` `1` `, ` `2` `, ` `3` `},` ` ` `{ ` `4` `, ` `5` `, ` `6` `} };` ` ` ` ` `traverseMatrix(arr, ` `0` `, ` `0` `);` ` ` `}` `}` `// This code is contributed by AnkitRai01` |

## C#

`// C# program to traverse the matrix recursively` `using` `System;` `public` `class` `GFG {` ` ` ` ` `static` `int` `N = 2;` ` ` `static` `int` `M = 3;` ` ` ` ` `// Function to traverse the matrix recursively` ` ` `static` `int` `traverseMatrix(` `int` `[,]arr, ` `int` `current_row,` ` ` `int` `current_col)` ` ` `{` ` ` `// If the entire column is traversed` ` ` `if` `(current_col >= M)` ` ` `return` `0;` ` ` ` ` `// If the entire row is traversed` ` ` `if` `(current_row >= N)` ` ` `return` `1;` ` ` ` ` `// Print the value of the current` ` ` `// cell of the matrix` ` ` `Console.Write(arr[current_row,current_col] + ` `", "` `);` ` ` ` ` `// Recursive call to traverse the matrix` ` ` `// in the Horizontal direction` ` ` `if` `(traverseMatrix(arr, current_row,` ` ` `current_col + 1)` ` ` `== 1)` ` ` `return` `1;` ` ` ` ` `// Recursive call for changing the` ` ` `// Row of the matrix` ` ` `return` `traverseMatrix(arr,` ` ` `current_row + 1,` ` ` `0);` ` ` `}` ` ` ` ` `// Driver code` ` ` `public` `static` `void` `Main (` `string` `[] args)` ` ` `{` ` ` `int` `[,]arr = { { 1, 2, 3 },` ` ` `{ 4, 5, 6 } };` ` ` ` ` `traverseMatrix(arr, 0, 0);` ` ` `}` `}` `// This code is contributed by AnkitRai01` |

## Python3

`# Python3 program to traverse the matrix recursively` `N ` `=` `2` `M ` `=` `3` `# Function to traverse the matrix recursively` `def` `traverseMatrix(arr, current_row, current_col) :` ` ` `# If the entire column is traversed` ` ` `if` `(current_col >` `=` `M) :` ` ` `return` `0` `;` ` ` `# If the entire row is traversed` ` ` `if` `(current_row >` `=` `N) :` ` ` `return` `1` `;` ` ` `# Print the value of the current` ` ` `# cell of the matrix` ` ` `print` `(arr[current_row][current_col],end` `=` `", "` `);` ` ` `# Recursive call to traverse the matrix` ` ` `# in the Horizontal direction` ` ` `if` `(traverseMatrix(arr, current_row, current_col ` `+` `1` `) ` `=` `=` `1` `) :` ` ` `return` `1` `;` ` ` ` ` `# Recursive call for changing the` ` ` `# Row of the matrix` ` ` `return` `traverseMatrix(arr, current_row ` `+` `1` `, ` `0` `);` `# Driver code` `if` `__name__ ` `=` `=` `"__main__"` `:` ` ` `arr ` `=` `[ [ ` `1` `, ` `2` `, ` `3` `],` ` ` `[ ` `4` `, ` `5` `, ` `6` `] ];` ` ` `traverseMatrix(arr, ` `0` `, ` `0` `);` `# This code is contributed by AnkitRai01` |

## Javascript

`<script>` `// Javascript program to traverse the matrix recursively` `let N = 2` `let M = 3` `// Function to traverse the matrix recursively` `function` `traverseMatrix(arr, current_row, current_col)` `{` ` ` `// If the entire column is traversed` ` ` `if` `(current_col >= M)` ` ` `return` `0;` ` ` `// If the entire row is traversed` ` ` `if` `(current_row >= N)` ` ` `return` `1;` ` ` `// Print the value of the current` ` ` `// cell of the matrix` ` ` `document.write(arr[current_row][current_col] + ` `", "` `);` ` ` `// Recursive call to traverse the matrix` ` ` `// in the Horizontal direction` ` ` `if` `(traverseMatrix(arr, current_row,` ` ` `current_col + 1)` ` ` `== 1)` ` ` `return` `1;` ` ` `// Recursive call for changing the` ` ` `// Row of the matrix` ` ` `return` `traverseMatrix(arr,` ` ` `current_row + 1,` ` ` `0);` `}` `// Driver code` `let arr = [ [ 1, 2, 3 ],` ` ` `[ 4, 5, 6 ] ];` `traverseMatrix(arr, 0, 0);` `</script>` |

**Output:**

1, 2, 3, 4, 5, 6,

**Time Complexity: **O(N * M)

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

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**

In case you wish to attend live classes with industry experts, please refer **DSA Live Classes**