在这个递归方法中我会返回什么?

问题描述

public static int bombs(char[][] maze,int row,int col,ArrayList<int[]> checked,int bombs)
    {
        int size = maze.length;
        String value = Character.toString(maze[row][col]);
        if (value.equals("#"))//add one to bomb if it went through a wall
        {
            bombs = bombs+1;
        }
        if(row==size-1&&col==size-1)//if it has reached the end
        {
            return steps;
        }
        if(inBounds(row,col,size)) //if point is in bounds
        {
            if(!pointWasChecked(row,checked)) 
            {       //if point has not been checked
                checked.add(new int[]{row,col});
                
            }
        }
        return 0;
    }
/*
. . # # #
. # . . #
# # # # #
# . # . .
# # # . .
example maze,this one's smallest path should be 2 bombs used
. is a path
# is a wall
/*

这是一种遍历迷宫的递归方法,当它到达墙壁时使用炸弹,但我想返回所需的最少数量的炸弹。我已经知道如何通过再次调用方法并执行 row+1、row-1、col+1、col-1 来遍历迷宫。我只是对我需要返回的内容感到困惑,这样我才能到达最后,不要返回零,并返回最少数量的炸弹。 感谢您的帮助!

解决方法

简短版本:返回 Integer.MAX_VALUE 而不是零。

长版本:假设 return steps 实际上是 return bombs,并且您已经知道如何进行递归调用:

如果当前位置有效(入站、尚未检查和未结束),您将在所有 4 个方向上进行探索。 在探索了所有四个方向后,您最终会得到 4 个值(在每个方向上前进后的步数)。然后返回每个值中的最小值。

如果当前位置无效,则必须返回一个大于任何正确值的值。最好的选择是 Integer.MAX_VALUE,它是可以用整数编码的最大值。

请注意,在大型迷宫中,蛮力递归可能需要相当长的时间,并且很容易导致堆栈溢出。