00:00
各位,咱们稍微坚持一下行不行,咱们把这个内存图画完之后,咱们咱们这个递归的这个内容就结束了啊,递归内容就结束了,咱们画个图各位啊。嗯。坚持一下啊,稍微坚持一下。保存一下啊。递归。原理啊。来各位,我别的不画了,好吧。我只画一个站啊,只画一个站,各位。我往这拖一下啊。往上推一下,别的我不画了啊。来个。注意听课了啊,来往这拖一拖。那不行,拖大点吧。来咱们看看同学们啊,首先我在这儿呢,先画一个什么呢。嗯。先画一个站。
01:01
这就是那个站各位啊,注意听啊站stack。集中精力啊,别睡觉啊,别睡啊。我找你了。别睡啊,来。各位看好了啊。咱们现在干嘛呢?就把这个画一下。首先啊,它会执行焖方法对不对,哎,焖方法来,那咱们画一下闷方法。方法啊。这话。线条让它细点啊,省得空间不够啊。过来了啊,这是那个闷方法啊。我们写到这吧,这叫闷方法,战针占针啊。闷法战争这个闷方法战争这块呢,首先啊,它会有一个萨。括号里边传一个三这样的一个方法,大家都知道,当这个方法执行结束之后,它的结果才能够付给这个变量,如果等号右边执行不结束,那么这个等号是不是往左边就赋不了值,所以呢,上来这个闷方法上来就会先去执行谁。
02:14
我们把这个程序改一下啊,这样吧,好看一点,In的N等于几啊三把N传进去行吧,啊就这么看吧,这么看啊来首先呢,这个N呢等于三,N等于三就相当于是在这块呢,它有一个N等于三。哎,有这么一个数据啊,或者有这么一个局部变量。那么接下来呢,他有了这个变量之后啊,他就调这个sum n方法去了。就是说他在这儿啊,他会去调一个方法叫做萨。明白吗?那么SN方法就会导致什么呢?同学们啊。就会导致它停到这儿对吗?他是不是停下来了?他是不是把三传进去了,停下来之后怎么着啊,他掉了萨姆方法呀,所以这一块呢,哎,我们是不是压榨呀,哎这块就是一个什么呀,萨方法战争吧。
03:05
哎,来,我们写上啊。这叫萨方法战针。各位啊,怎么压进来的,就是从这压进来的。啊,这个位置。来我们用一下这个这个蓝色吧。进来,他。啊,就是这个方法压进来了,能看清楚吧,好,那么掉在我们现在这个战当中,上边这个方法处于活跃状态,Some方法战争处于活跃状态,这个具有执行权。就这个里边也有一个int n。它是在这把三传进去了,所以这个int n局部变量在sum方法中也是占用什么呀,哎,也是int n等于几啊等于三。等于三个位啊,那么接下来呢,这个程序继续往下走,如果N等于等于一一,现在关键是N等于三,所以执行这个对吧。
04:00
执行这个代码,好,各位看好了啊。这个代码。我写到这儿。各位啊,你看啊。我不知道大家理解不理解,注意听了啊。现在N是等于三的萨三。减一等2SUM2这个代码不结束,这个加法是不是运算不了?这个加法什么时候才能运算,是不是只有后边这个代码执行结束,是不是才能去运算这个加法。是不是啊?同学们,你现在这个是不是三三。不等于一走这个,但是走这个这个return并没有执行,为什么?因为后边这个计算完这个return才能执行,而你后边个计算是是先算这个加法,加法算完之后才能return,而你加法要算的话,你右边这个值先先出来,你右边这个值呢是谁呢?
05:03
右边这个指是谁呢?是sum方法,所以这个时候你在这里调了什么呀?哎,我们直接写上了啊,调了一个代码。这个代码是什么呢?是return什么呀?哎,然后叫做三加上什么呀,哎,Some谁呀二。注意听啊,注意听各位啊,听好了啊。来。它直行到这个位置上之后。是不是听到这?N等于三嘛,三传过来三加上萨二嘛,所以这个时候呢,它会卡到这个位置上,各位我圈个圈啊,圈个圈,圈个圈是卡到这儿了啊,卡到这儿了,只有这个执行结束,才有必要算这个加法,才能算这个加法啊,所以这个时候呢,它这个方法的调用就会意味着什么呀,哎,我们要压站压战啊,压过来谁呢?当然还是萨方法战争了。对萨马战争啊,压过来这个就是那个萨方法战争。
06:07
那么这个萨姆防火战争是怎么来的呢?哎,就是这样压进来的。压进来的啊好了,那么压进来之后呢,接下来我们其实就是调三方法,只不过这个是二是不是,哎,所以这一块呢,它里边的数据是什么呀,是int n等于什么呀,哎,二。啊,你的SUM2吗?二传过来,那是不是在这儿,RETURN2在这有一个什么呀?哎,Return什么呀?Return return2加上什么呀?Sum括号一。你想想是不是这个道理,但是它一旦执行到这个位置上之后呢,它怎么着呢?哎,它就停到这儿了。各位,它卡到这儿了,哎,我在这画一个画一个圈啊,卡到这了各位啊,卡到这了,卡到这儿之后呢,这个实际上是调方法,调方法它就会压站呀。对吧,哎,实际上在上面又压过来什么呀,哎叫做sum方法战针啊,这个叫做萨。
07:05
方法战针啊,那这个sum方法战针是怎么压过来的呢?是因为你这个位置的。一个执行啊,压进来的,压进来的好了。好了各位啊,你注意啊,只有这个方法结束之后,才能轮到这个加号。这个加号算完之后才能return,这个return之后返回的结果就就在这这块明白吗?这块结束之后,哎,再和他算加法,算完的结果再去return。Return之后这个值,哎,这个方法就结束了,返回值了啊,就返回值了,就这个意思啊这个意思,注意啊,N等于三最初,然后呢,调SUM3这个方法过来之后呢,压进来,压进来之后呢,哎。注意咱们这块呢,N等于三三加上SUM2嘛,SUM2这个方法掉嘛,是不是,哎调上面的方法之后呢,我们这个二就是变成什么呀?哎,N等于二二加上SUM1,那SUM1这块呢,哎,说白了这就是一了,那这样就是int类型什么呀。
08:10
哎,叫做类型N等于几呀,1N等于一,然后接下来这个就成立了,各位这个一旦成立之后,RETURN1呀,所以这个时候在这里会执行什么呀,RETURN1。啊,这个RETURN1不要紧,只要是说我们这个return一行好,我问大家是不是代表着方法结束。方法结束并返回一对吗?方法结束并返回一,那么这个时候我们的内存方面是不是代表这个就弹走了。对吧,哎,这就弹出去了,弹出去了,但它弹出它往回返回了个几啊,返回了一,所以这块这个整体它会return一个什么一。明白吗?它特一之后呢,接下来这个就是个一,你懂吗?我不知道大家理解不理解这个啊,来我我我把这颜色,呃,我把这个画的重一些啊。
09:07
这个就是一。为什么这个是一,因为你这个方法调的是这个吗?你调的SUM1,这个方法调压的是这个吗?这个return的一个一返回的一,那证明这个位置是不是就是一。那这样的话,大家想是不是在这儿就是一个return什么呀,哎,RETURN2加上什么呀,加上后边谁呀。加上后边这个sum姆括号一啊,你萨姆括号一的方法执行结果是多少是一呀,你萨姆括号一是不是返回的一啊,所以这块这个就是一吗。对不对,哎,那如果这个是一的话,实际上,哎,我们接下来再往下,大家想这个return一旦结束,是不是就意味着。我们这个就弹出了。对吧,那这个一弹出之后呢,整个这个方法结束之后,返回的是一个二加一,返回二加一,那就意味着什么呢?那就意味着它是一个二加一。
10:03
返回二加一这个方法吗?你不是在这调的SUM2这个方法吗?调的这个方法,这个方法结束之后RETURN2加一啊,RETURN2加一不就是三吗?这就是三啊,所以在这一块是不是就相当于是return是什么呀?哎,Return什么呀三。是吧,第一个不是三吗?哎,加上什么呀,加上这个特二加一就是三呀,所以RETURN3加三。三加三,或者说你也可以拆分成什么呀,哎,Return这个是二加一,加上这个三的话就是三加二,再加什么呀,一都是可以的。好,那这样的话,你整个这个程序执行结束之后,就相当于是因为我这调的嘛,对不对,我这调的是哎,我们整个的这个代码啊,这个代码反馈的是三加二加一。那这样的话,我们这个程序啊,就完美了啊,就完美了来,我可以把它往右稍微挪一挪啊,稍微挪一挪。来这块呢,我也可以给他稍微挪一下啊,稍微挪一下。实际上我们这个位置算完之后,就是这个直,就这个直。
11:04
结果了啊,假如这个结果是RR,这输出R啊,那假如这个是R,那么这个时候我们就相当于在这个位置算完之后,他付给谁呀,付给R。啊,负点R。赋予R之后呢,接下来我们在这输出R就行了啊,输出R。那这个sum这块呢,是三三是对应的这个方法,这个方法反馈是RETURN3加二加一嘛,哎就是六嘛,六一返回给他,那无非就是最后这个R就是六呗。是不是就是六啊,R就是六。所以这个就是一个递归嘛,就是一个递归,各位啊,递归的一个执行原理,就是这样的一个原理啊,好,那么接下来我们再来把这个程序呢,编译一下,我们再去运行一下,大家看这就是一个递归的一个原理啊,递归的原理。嗯。好,这个还是非常非常经典的,各位啊,非常非常经典的。
我来说两句