java---对递归的详细分析(迷宫图)

首先这段代码是基于你看过了韩顺平老师的数据结构与算法的递归那两章节,没看过的小伙伴可以先去看看哟,会有很大收获的,看过之后你就会对递归有很大的理解了,当然下面是我在理解之后又出现疑惑。

首先看代码

​
 public static boolean setWay(int[][] map,int i,int j){
        if(map[6][5]==2){
            return true;
        }else{
            if(map[i][j]==0){
                map[i][j]=2;//假设该点可以走通
                if(setWay(map,i+1,j)){//向下走
                    return true;
                }else if(setWay(map,i,j+1)){//向右走
                    return true;
                }else if(setWay(map,i-1,j)){//向上走
                    return true;
                }else if(setWay(map,i,j-1)){//向左走
                    return true;
                }else{
                    //该点走不通,为死路
                    map[i][j]=3;
                    return false;
                }
            }else{//map[i][j]!=0
                return false;
            }
        }

​

加入我们在main 方法中创建了对象并调用了此方法,我们赋值 i=2,j=2

开始执行代码 首先判断map[6][5]==2为false 所以跳过if 进入else里它首先会你这个位置是否走过,如果没有没有走过if(map[i][j]==0),然后它就假定你可以走通map[i][j]=2;

然后我们到了重点if(setWay(map,i+1,j)此时它调用了它自己的方法,也就是递归,然后我们又开始重新执行代码,此时的 i, j发生了变化,也就是位置进行了变化,我们需要再次判断这个点是否走过,如果没有走过我们就需要再次调用自己的方法,一直向下走,直到map[i][j]!=0,也就是向下走不了了,此时将返回值传递给if(setWay(map,i+1,j))也就是说原先我们的方法因为调用了自己的方法(也就是递归),所以他暂停在了if(setWay(map,i+1,j)这,,直到它调用的那个方法执行完之后(也就是出栈)后,他得到了一个返回值之后,他才能继续执行,若他得到的为false,则它会继续执行else if(setWay(map,i,j+1))(也就是向右走),然后它再次暂停在了这,继续调用 setWay(map,i,j+1)再次重新先向下走....直到确定一个返回值,那么if(setWay(map,i+1,j)这个原先的方法才会继续往下执行(注意,递归返回原方法后(也就是出栈后),原先的方法需要继续执行原来的代码直至结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值