如何转换为尾递归

问题描述

我了解尾递归是什么,但我无法将此方法转换为尾递归。我正在尝试计算矩阵中有多少相邻元素。因此,我的问题是如何将其转化为尾递归?

public static int ExploreAndLabelColony(char[][] grid,int i,int j,char c,int count) { 
        grid[i][j] = c;
        count = 1;
        if ((i>0 && i<grid.length && j<grid[0].length) && (grid[i-1][j] == '1')) { //vertical bottom
            count +=ExploreAndLabelColony(grid,i-1,j,c,count); 
            }
        if (i+1<grid.length && j<grid[0].length && grid[i+1][j] == '1') { //vertical top
            count+=ExploreAndLabelColony(grid,i+1,count); 
            }
        if (j>0 && i<grid.length && j<grid[0].length && grid[i][j-1] == '1') { //horizontal left
            count +=ExploreAndLabelColony(grid,i,j-1,count); 
            }
        if (i<grid.length && j+1<grid[0].length && grid[i][j+1] == '1') { //horizontal right
            count+=ExploreAndLabelColony(grid,j+1,count); 
            }
        if (i+1<grid.length && j+1<grid[0].length && grid[i+1][j+1] == '1') { //diagonal bottom right
            count+=ExploreAndLabelColony(grid,count);
            } 
        if (j>0 && i+1<grid.length && j<grid[0].length && grid[i+1][j-1] == '1') { //diagonal bottom right
            count+=ExploreAndLabelColony(grid,count);
            } 
        if (i>0 && i<grid.length && j+1<grid[0].length && grid[i-1][j+1] == '1') { //diagonal top right
            count+=ExploreAndLabelColony(grid,count);
            } 
        if (i>0 && j>0 && i<grid.length && j<grid[0].length && grid[i-1][j-1] == '1') { //diagonal top left
            count+=ExploreAndLabelColony(grid,count);
            }
            
        return count;
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)