00:00
那接着呢,我们关于这个方法呢,后边还有一个,呃,方法的一个相关的这个内容叫做递归调用啊,或者叫递归方法,哎这块呢,咱们,哎这个上午讲的时候呢,也提到了,关于方法呢,咱们再谈呢,就谈四个事儿,哎第一个呢,咱们叫方法的重载,哎第二呢叫可变个数形态的方法,第三个呢,就是参数的直传力机制,第四个呢,就是这个叫递归,哎这个递归呢,实际上呢,大家可以看成是一个了解的啊嗯,那由由于呢,可能在这个大家笔试面试的当中,或者说我们开发当中可能会见到递归,所以呢,给大家稍微讲一下。但是毕竟咱们写的相对来讲要少一些啊,咱们在讲数组排序的时候讲过快排,快排里面就是递归,它就是一个递归方法,呃,咱们也提到过啊,所谓的递归就是在一个方法中,它自己掉自己了,其实也相当于是形成一种循环了。
01:03
你自己吊自己,自己呢,又吊自己,自己又吊自己,这不就是一种循环吗?哎,但是这种循环它也不能够无限制的执行下去,哎,无限制执行下去,那就又成了死循环了。行,咱们通过几个例子呢,让大家去体会一下啊啊这呢叫递归啊瑞怎么念。CU是吧,来我们测试一下,这个挺多了,我再建一个。关于他的一个。哎,这呢,我们叫递归方法的一个使用啊,这个呢,大家写成是一个了解吧,哎,就是我们现在讲面向对象呢,这儿呢,先不要当成是一个中心的啊,呃,首先什么叫递归,这里提了。
02:04
啊,这是第一个问题啊,说呢一个方法体内调用,它自身就是自己到自己啊,这就叫做递归啊行,然后呢,关于这里边的说明和注意点,下边这两个CTRLC啊一个月看一下,首先说方法的递归啊,它其实包含了一种隐式的循环,它会重复的执行某段代码,但是这种重复执行呢,无需循环控制,就是它既像循环一样,哎,会去不断的执行,但是呢,又不用你去写for或者是well。举个例子,哎,我在下边这个举例子啊,哎,我这PPT里边呢,其实也写了一个例子,那拿这个数来说吧,首先呢,我们现在做这样的一个题目啊,这个算式叫例一。我呢,去计算一到100之内所有自然数的和。
03:08
嗯,这个之间所有自然数的这个和计算所有自然数的和咱们呢,用for循环那写的还是挺爽的,嗯,这个我们我先给他整在main方法中去写这个逻辑吧,我就不单专独的造成个方法了啊,直接呢,我们看这个功能啊,哎,咱先写成一个负循环啊,那就很简单了。哎,提前的话呢,你也先定一个sum,哎先是个零,然后在这里边sum加等于我们这个I,哎这就成了,哎这呢是咱们使用这个for循环来做的,哎,方式一,哎for循环当然呢,它就包含了一种循环结构了,下边呢,我们用这个递归来体会一下。
04:04
哎,放这二,放这二递归这呢,咱们叫递归方法,那我就得造一个方法了。哎,造一个方法啊,诶public我这呢,返回的是一个它吧,这个我们就要get一个sum啊,这样我这呢一个嗯I,哎这个I或者叫N也行啊,这个呢,其实就是咱们的这个,你要是前100个,那就是这个N呢,在这掉的时候呢,就拿100来算啊好进来进来以后啊,怎么操作呢?递归啊,就是自己掉自己,那这个如果要是N是一。那这个结果呢,你知道就是一,如果N要是二。那你是不是得一加上二,嗯,如果N要是三,那你得一加二加三,那这个这个后边呢,就要加上N,这呢就叫前个数求和,你发现前个数求和的话呢,哎,我要求的这个前个数,其其实呢,它是基于你前面的这个N减一个数求和以后,再加上你当前的这个数就可以了啊,那每一个都是这样的,所以我们就相当于我想求前个求和,那我就先把前N减一个求出来,前N减一个要想求出来呢,又得求出来前N减二个啊,又得需要前N减三个,一直得得得得一直到得需要求第一个啊,这一说呢,反而还有点懵,直接上代码是吧,当我们这个N是一的时候。
05:31
对,那我就return呢,就是你当前的一个数一,哎,先给你这样的一个值啊,那除此之外我这写个else,那除此之外呢,我们return谁,我return我的N加上get sum n减一,哎,那这个题呢,就写完了。它自带循环,比如说这个数呢是三。啊,你是三一进来不走这走这我就是确三加上是不是三进get sum2了,它自动的就回来就变成二了,二呢又进不来这个,然后这块呢,Return这个就变成二加上get sum2减一,这就一了,再进来,进来的时候呢,这个一就回去了,一回来以后呢,是不是又返回刚才那二的位置了,这就是一加上这个就是二了,这个得出来这三呢,是不是又返回到刚才那个三的位置了,然后呢,这个就变成了这个一加二是三,然后前面又是个三,这不就整个返回来六了,有点迷瞪是吧?嗯,就是你现在要计算三,三是不是得去考虑计算这个二啊,二是不是又得考虑计算这个一啊,哎,这不是就一层层就进去了,一这块呢,告诉你是一了,这块你这不就翻回来,翻回来,然后再翻回去,这不就算出来了吗?这就是一个递归啊,你看这时我们测试一下啊,咱们。
06:58
这个方法呢,要想在may里边调,我得去造当前类的对象,然后呢,我通过这个test呢,咱们去调这个get sum,哎,我放进去这个100这块呢接收一下,哎上面有这个萨,我叫萨一吧,我我这块呢输出一下这个叫萨一,咱把上面这个呢也打开,你对比一下,看看这个结果呢是不是一样。
07:23
这样呗,哎,你看这不一样吗?哎,说明呢,下边这种做法呢,也是对的,哎,这呢就是一种递归的实现。啊,它这呢,就是前N个数求和啊,哎,这是它的一个公式叫递归实现的,这呢是求和,那你其实呢,我把这个呢,CTRLC一下,Ctrl v ctrl shift f,我这改成一个二啊。行,上面这个描述没变,有时候一条格式上面这个字有时候就就乱了啊嗯,这呢,我也叫get一个sum,这也写成呃,这个SUM1吧,这个我就不要了啊,嗯,Get sum1,这个呢,我就要计算一到100之间所有自然数的乘积。
08:17
乘积用for循环,大家肯定也会写,就这个位置是不是变成成等一对,那这块呢,怎么办,变了,我这是就是什么N就乘以。他就可以了,呃,改个一是吧,我这是计算一到100或者一到N吧。嗯,这个是一到N啊,一到N之间所有自然数的乘积,它其实这不就是N的阶乘吗。啊,相当于呢,就是N的阶乘,怎么来计算,哎,这不就这样来算嘛,N要是一的话呢,这就是一,N要是二的话呢,那就二乘以这个这个get sum这个时候是一的那个结果。
09:04
哎,这呢,就是N的阶乘的一个计算。哎,就是刚开始呢,大家可能还不太适应这种这种思路,这种写法一样哈,嗯,就是你看我们这个get sum呢,它会在某种情况下呢,又接着调它,它呢又在又调回来以后呢,又接着调它又接着调自带这种循环,那跟循环结构讲的一样,这种自带循环的话呢,它也得有这个终止的情况,那其实它终止的情况下就都奔到你这个方向去了。啊,上面这有说明,说递归呢,一定要向着已知的方向去递归,否则呢,这种递归就变成了无穷递归啊,类似于死循环。你看我们这个时候啊,咱们想算的这个N假设是十,十的话呢,我得需要的去求取这个,求这个九,九呢进来以后呢,九得去求八八呢进来得去求七减减减减减就奔到这个一这了。
10:05
哎,这就是一个中指这块不用再往下走了,哎,这是这样的一个思路啊。
我来说两句