【数据结构与算法 8,34岁程序员年薪50w

本文探讨了Java中的递归原理,包括栈空间、局部变量、引用类型变量的处理以及递归的应用场景,如数学问题、算法实现和解决迷宫问题。通过一个具体的迷宫问题实例展示了如何使用递归进行路径寻找,并提供了代码实现和分析。强调在面试中理解基础和高并发技术的重要性。
摘要由CSDN通过智能技术生成

public static void test(int n){

    if(n>2){

        test(n-1);

    }

    System.out.println("n="+n);

}

打眼一看,很low,很简单,4,3,2无疑。

为了验证我的聪明才智,输出一把吧

三、递归调用规则(很重要)


1、执行一个方法时,就创建一个新的受保护的独立空间(栈空间);

2、方法的局部变量是独立的,不会相互影响,比如变量n;

3、如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据;

4、递归必须向退出递归的条件逼近,否则就是无限递归,StackOverflowError;

5、当一个方法执行完毕,或遇到return,就会返回,遵守谁调用就将结果返回给谁,同时当方法执行完毕或return时,该方法也就执行完毕。

四、递归能解决什么样的问题


[](

)1、各种数学问题

比如八皇后问题、哈诺塔、阶乘问题、迷宫问题、球和篮子的问题(Google编程大赛)。

[](

)2、各种算法中也会使用递归

比如快排、归并排序、二分查找、分治算法。

[](

)3、栈解决的问题都可以用递归

代码更加简洁。

五、迷宫问题


1、代码实现


package dataStructure.recursion;



public class Labyrinth {

    public static void main(String[] args) {

        //迷宫问题

        //0 表示该点没有走过 当为 1 表示墙  ; 2 表示通路可以走 ; 3 表示该点已经走过,但是走不通

        int[][] map = new int[8][7];

        for(int i=0;i<8;i++){

            for (int j = 0; j < 7; j++) {

                map[0][j] = 1;

                map[7][j] = 1;

                map[i][0] = 1;

                map[i][6] = 1;

            }

        }

        //设置挡板, 1 表示

        map[3][1] = 1;

        map[3][2] = 1;

        for (int i = 0; i < 8; i++) {

            for (int j = 0; j < 7; j++) {

                System.out.print(map[i][j]+" ");

            }

            System.out.println();

        }

        setWay(map,1,1);

        System.out.println("迷宫走过之后地图");

        for (int i = 0; i < 8; i++) {

            for (int j = 0; j < 7; j++) {

                System.out.print(map[i][j]+" ");

            }

            System.out.println();

        }

    }



    //使用递归回溯来给小球找路

    //说明

    //1. map 表示地图

    //2. i,j 表示从地图的哪个位置开始出发 (1,1)

    //3. 如果小球能到 map[6][5] 位置,则说明通路找到.

    //4. 约定: 当map[i][j] 为 0 表示该点没有走过 当为 1 表示墙  ; 2 表示通路可以走 ; 3 表示该点已经走过,但是走不通

    //5. 在走迷宫时,需要确定一个策略(方法) 下->右->上->左 , 如果该点走不通,再回溯

    private static boolean setWay(int[][] map,int i,int j){

        if(map[6][5] == 2){


# 总结

无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。

**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](https://codechina.csdn.net/m0_60958482/java-p7)**

![面试了阿里,滴滴,网易,蚂蚁,最终有幸去了网易【面试题分享】](https://img-blog.csdnimg.cn/img_convert/3e7919d40a7ac4239089c52ce0e12029.png)

些感触。

最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。

**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](https://codechina.csdn.net/m0_60958482/java-p7)**

[外链图片转存中...(img-A3yMAeJW-1630668794391)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值