双人网页游戏网站,重庆怎么在网站上做广告,做网站 就上凡科建站,建立一个公司自己的网站一、概述 上一期#xff0c;我们是具体学习了File类的一些概念基础知识点#xff0c;以及对于该类的常用方法进行了一个全量举例演示#xff0c;这也是考虑到有的小伙伴在阅读的同时#xff0c;没有时间去实际测试#xff0c;所以我也就顺带的给大家去做了实例演示#x…一、概述 上一期我们是具体学习了File类的一些概念基础知识点以及对于该类的常用方法进行了一个全量举例演示这也是考虑到有的小伙伴在阅读的同时没有时间去实际测试所以我也就顺带的给大家去做了实例演示一来给需要的小伙伴能有个标准答案可观摩二来就是为了方便有些读者没有实操场地从而可以看我的列举并对于每一个实例都有一个对应的截图这就很为读者们参考了。而这一期我要给你们聊点什么呢这是个问题刚下班到家头有点迷糊但是今天的文章还没更新 所以需要给你们一个交代不是。 所以这一期我跟大家聊聊递归吧以前在刷题的时候经常有用到递归思路所以对于大家而言递归思想也是需要掌握的。 废话不多说咱这就开始干正事
二、本期教学目标
掌握何为递归能够使用递归的方式计算一些阶乘能够简单谈谈递归的优劣能够谈谈递归会导致内存溢出隐患的问题...
三、正文
1、概念 一开始听到这么个词肯定不是很理解那你们字面理解递归二字应该是啥意思呢其实呢也很好理解递归就是指在当前方法内自己调用自己这么种现象就被称为递归。
2、递归分类 递归也分类一般递归分为直接递归和间接递归。
直接递归指方法自身调用自身。间接递归值相互之间调用比如a方法调用b方法b方法调用c方法c方法调用a方法。
3、递归优劣比较 需要注意的是递归容易造成死循环也就是我提到的内存溢出问题所以对于递归要有条件限定保证递归能够正常结束而不是一直死循环自我调用跳不出来。 其次就是递归需要限定条件但是递归次数不能太多否则也很有可能发生栈内存溢出。 最后就是对于构造方法是不允许递归的。
4、解释内存溢出隐患问题 这问题也就是我上述提到的“死循环”既然要用递归那一定要限定条件及终结递归的条件保证递归能跳出否则一直递归下去肯定得把内存占满导致内存溢出。
四、实例演示 接下来就是实战环节了我先问大家个问题累加如何实现遍历嘛按次数遍历这是最普通的做法那我要是说到递归呢我说就可以用递归来解决。 说到累加累乘这类题若不要求时间复杂度那最简便快捷的方式就是采用递归的实现方式所以接下来我给大家诺列几道递归题结合实际场景来运用递归思想帮助大家能快速吸收掌握。
1、实例题1 请计算1-10之间的累加和。要求用递归思想实现。 分析何为累加就是前两数之和与后一个相加然后之和接着与后一个数进行累加就比如num(n) num(n-2)num(n-1),所以你看啊这里就其实满足递归的创建了累加的操作就可以定义成一个方法然后递归调用。这样说你们能理解么?不理解也没事我接下来带着大家去实现一遍这道题吧。
代码如下
第一步我们先来找找规律从规律中找到方法如何定义具体如下 sum(1) num1 sum(2) sum(1) num[2] sum(3) sum(2) num[3] sum(4) sum(3) num[4] sum(5) sum(4) num[5] ... sum(n) sum(n-1) num[n] 所以这规律完全具备递归条件接下来你们知道递归函数怎么写了吗
代码如下
//递归求和public int getSum(int num) {/*** 方法的出口num总有为1的时候。*/if (num 1) {return 1;}//num不为1时方法返回 num (num‐1)的累和//递归自我调用getSum()return num getSum(num - 1);}
然后我们再来写个测试类调用该getSum()函数然后入参我们传10。 Testpublic void test() {//求1-10累加和System.out.println(1-10累加和为: this.getSum(10));}具体运行控制台打印 打印结果是不是对的啊。若你不是很清楚它具体的执行的方式我还可以给你打印一下执行过程。 我是直接将num给打印了你们看其实递归是执行了10次这样你们总能理解了吧。
2、实例题2 请计算10的阶乘。要求用递归思想实现。 分析可以先找找规律也是有帮你如何实现累乘方法。 sum(1) num1 sum(2) sum(1) * num[2] sum(3) sum(2) * num[3] sum(4) sum(3) * num[4] sum(5) sum(4) * num[5] ... sum(n) sum(n-1) num[n] 那么n的阶乘拆开应该为n! n * (n‐1) *...* 3 * 2 * 1
所以代码实现也很简单。 Testpublic void test() {//求10!System.out.println(10!结果为 this.getSum(10));}//递归求阶乘public int getSum(int num) {/*** 方法的出口num总有为1的时候。*/if (num 1) {return 1;}//递归自我调用getSum()return num * getSum(num - 1);}
具体运行控制台打印