将没有任何循环的二维数组的 C++ 递归填充实现转换为 Java?

Translating C++ recursive floodfill implementation for 2D array without any loops, into Java?

我正在尝试翻译不使用任何循环的递归泛洪填充实现。我不断收到堆栈溢出错误,我不确定为什么。我一直在尝试翻译 C++ 代码 here

如何修复我的 Java 代码翻译?

C++原代码:

// A recursive function to replace previous color 'prevC' at  '(x, y)'  
// and all surrounding pixels of (x, y) with new color 'newC' and 
void floodFillUtil(int screen[][N], int x, int y, int prevC, int newC) 
{ 
// Base cases 
if (x < 0 || x >= M || y < 0 || y >= N) 
    return; 
if (screen[x][y] != prevC) 
    return; 

// Replace the color at (x, y) 
screen[x][y] = newC; 

// Recur for north, east, south and west 
floodFillUtil(screen, x+1, y, prevC, newC); 
floodFillUtil(screen, x-1, y, prevC, newC); 
floodFillUtil(screen, x, y+1, prevC, newC); 
floodFillUtil(screen, x, y-1, prevC, newC); 
} 

我的Java floodFill() 方法:

public void floodFill(int[][] pic, int row, int col, int oldC, int newC) {

  // Base Cases
  if(row < 0 || col < 0 || row >= pic.length - 1 || col >= pic[row].length - 1) {
     return;
  }
  if(pic[row][col] != oldC) {
     return;
  }

  // recursion
  floodFill(pic, row++, col, oldC, newC);
  floodFill(pic, row--, col, oldC, newC);
  floodFill(pic, row, col++, oldC, newC);
  floodFill(pic, row, col--, oldC, newC);
}

我需要在程序中加入行 pic[row][col] = newC。另一个问题是我不知道 variableName++ 是与 variableName + 1 不同的命令,所以递归没有按预期工作。 variableName++ returns variableName 递增之前的值。

此代码允许我的程序运行:

public void floodFill(int[][] pic, int row, int col, int oldC, int newC) {

  // Base Cases
  if(row < 0 || col < 0 || row >= pic.length || col >= pic[row].length) {
     return;
  }
  if(pic[row][col] != oldC) {
     return;
  }

  pic[row][col] = newC;

  // recursion
  floodFill(pic, row + 1, col, oldC, newC);
  floodFill(pic, row - 1, col, oldC, newC);
  floodFill(pic, row, col + 1, oldC, newC);
  floodFill(pic, row, col - 1, oldC, newC);
}