Stop the recursive function when it reaches high depth in c

  • A+
Category:Languages

I want to stop the recursive function when it reaches 3000 depth. how do I do it?

 void DFS(bool M[][COL], int row, int col)      {          short k;          M[row][col] = 0;           for (k = 0; k < 4; k++){             if(k==0){                 if (isSafe(M, row , col - 1) ){                     DFS(M, row , col - 1);                 }             }             if(k==1){                 if (isSafe(M, row , col + 1) ){                              DFS(M, row , col + 1);                 }             }             if(k==2){                 if (isSafe(M, row + 1, col) ){                               DFS(M, row + 1, col);                 }             }             if(k==3){                 if (isSafe(M, row - 1 , col) ){                              DFS(M, row - 1, col);                 }             }         }      } 

When I added the counter, I tried to return it when it was 3000, but I can't say I was very successful.

I have 512 * 512 matrix and I am looking for an island in this matrix. The recursive function gives the error if one of the island's area is more than 10000 units.

 


I want to stop the recursive function when it reaches 3000 depth

A general solution to this is to add a "depth" argument to the function, and pass depth + 1 to each recursive call (or remaining_depth - 1 if you want to count backwards). To hide this from an outward-facing API, make the public function – without the depth argument – simply call the actual function with the initial value for depth.

For example:

#define MAX_DEPTH 3000  static void dfs_(bool M[][COL], int row, int col, int depth) {     if (!isSafe(M, row, col)) { return; }     M[row][col] = 0;     if (depth >= MAX_DEPTH) { return; }     dfs_(M, row, col - 1, depth + 1);     dfs_(M, row, col + 1, depth + 1);     dfs_(M, row - 1, col, depth + 1);     dfs_(M, row + 1, col, depth + 1); }  void DFS(bool M[][COL], int row, int col) {     dfs_(M, row, col, 1); }  

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: