00:00
那假如说我现在要求大家使用递归的方式,我就是故意刁难大家啊,当然这个程序在实际开发中,你用for循环就行啊,因为我说过能用循环代替的就用循环,先别用递归是吧,但是我现在就故意刁难一下啊,就是这个位置你用一下递归,你看你能不能给我写出来。就还是这个程序啊零三对吧,现在是使用递归对吧?哎,请编写程序计算一到N的和,那现在我该怎么做呀。该怎么做,你比如说我就计算一到三的和吧,我用递归的方式。这个你不一定能写出来,各位啊。不一定能写出来。这个代码改了。你还是调这个方法是不是啊,你调用这个方法吗?传个三进去。啊。计算一到N的和,你把这个改成递归的方式。就是这个代码啊,修改为递归的方式,递归的方式。
01:04
嗯。递归的方式。怎么怎么做呢,这个。递归是some调some呗,Some调some是吧?递归你看挺有意思。是吧,哎,你这个结果可以是一加上二,也可以加上什么呀,三也可以是三加上二,再加上什么呀,哎,一都行。对吧,你看你这个一一到三的和是三加二加一好呢,还是一加二加三好,你看哪个写成递归比较好,我建议使用这个啊,这个这个变成递归的方式,你看你怎么递归。思考一下啊,思考一下。好,大家看啊,这个三是不是先传过来的,那就是N最初是等于三的对吗。是不是,哎,那三。三加上减二是吗?二怎么得出来N减一对不对?
02:06
二是不是N减一啊。对吧,那三呗,三加上二百二是怎么得出来的。二是怎么得出来的?N减一呗,有这个思路吧。对吧,那那大家看看啊,如果是some方法,它这个三传过来放到这儿了。我们调到这个sum姆方法,然后萨姆方法这边又调了一个sum n减一。会是什么样?你看啊,最初是三是不是三过来的时候三减一是多少啊。二。对吗?
03:02
那如果是some,这里边是二的话,是不是就相当于又掉这个方法了?那么调这个方法之后,传过来二之后,那我们你再过来执行这个单括号里面代码二减去一是多少啊。是不是就是一呀。我不知道大家有没有理解啊,这个代码片段不变了啊,就这样了,Sum sum方法去调sum方法,Sum方法去调sum方法,只不过sum调sum的时候,这个N传过来给它减个一。那假如说第一次大家推理一下啊,三过来,这是不是三。是不是三三过来之后,三减去一是多少二,那这个是不是就是sum括号二啊好,那我问你递归懂吗?Sum方法调sum方法括号里边传个二二是会付给谁N对吗?好过来执行,那么这个2N是二,N是二,那么这个时候N是二二减一,我问大家是不是就变成了SUM1啊。对吧,那么萨这过来,你这个传给了N是不是,就是如果是的话,大家想归是不应该结束。
04:11
因为从三到二二到一,你好好想想。是不是总有一天N要等于一的情况下,是不是递归就结束了,你递归得有结束条件啊,你没有结束条件你咋整啊?你你你再想想,三传进来。传进来之后,三减一是多少?二,那这个就是sum减二,那SUM2的话,SUM2调这个方法,那这个N就是二呗,二减一是多少,是一呗,是一的话,那就是SUM1呗,那是SUM1的话,你你想想,你刚才三也有了,二也有了,你一又传过去了,那你一三加二加一不就完事了吗?你再往后减没有意义了,所以N呢,等于一是最后的一个终结条件啊,就是我们现在递归的结束条件是N等于一的时候,我们递归结束啊,N等于一的时候递归结束。
05:01
来,那么这块呢,我们应该有判断条件了啊if如果说我们。就是大家努力的去看啊,去听啊,自己写不出来没关系,关键是能不能看懂,我觉得这个是最主要的啊,关键是能不能看懂,好吧,那么这块呢,把这个三呢传进来之后呢,哎,首先我们如果说N啊要等于等于一的情况下,那我就不用说了,就直接什么呀,诶return一个一就完事了。一个一直接直接返回,直接这个方法返回一个一就行了。啊,然后接下来我们再往下的话,程序能到这儿,这说明啥。N不是一对吧,程序能执行到此处说明N不是一,那如果N不是一,那干啥呢?
06:00
那应该拿着这个N干啥去呀?去加上什么呀,萨N减一对吗。你看啊。各位看看能不能看懂,你看啊,三是不是这是不是三三等于一吗?不等于一,不等于一是不是往这走了,所以这个是几啊。这个代码我在这放着啊,好拿过来,这是几,这是不是三。对吧,SUM3减几一二吧,好各位,这个代码先注释掉啊,注释掉这个代码,再翻开它三加上萨括号里面有个二的时候,二是不是就进去了。二等于一吗?不等于一对吗?不等于一是不是,是不是就走到这儿了。是不是又走到这儿了,因为这个N是二,你SUM2嘛,你这个二是不是传过来。对不对,哎,那这个是不是就是二。是不是啊,就是这个式子是不是就分解成二加上萨一呀,就这个是不是又分解成,因为你掉的是萨摩传的是二嘛,你这是不是二呀,这个条件不成立吗。
07:13
那这个N是二的话,你这个分级,你你这个二传进去,你这个不就是二吗?这个就是二减一是一嘛,那就相当于这个式子删掉之后,它要等于什么呀,你你。这传的是二嘛,是吧?哎,所以这边呢,这个再拿过来放到这儿,这个不就是二嘛,这是二减一是多少啊。是啊。那么。如果说我们SUM1这一块的话,再往下走,大家想一想,是不是我们去调的方法一就传给NN的等于等于一是吧,RETURN1就是这个some方法执行结束之后,这个方法执行结束,它是不是有返回值,返回一,所以这个整体就是一对吗?所以这样的话是不是三加二再加一吗?就很巧妙,对不对。是不是很巧妙?好,那我问你最后算完三加上二加上一之后,这个结果要不要返回呀,因为你这个结果是方法是需要一个int吗?所以这块呢,你就直接return是不是就行了。
08:13
嗯。这个就是完事了。这个不太好写,各位啊各位,应该是写不出来。以目前大家这个水平啊。递归。这就行了。咱们先说第一件事,各位啊,大家能不能能不能看懂,我觉得最主要你不要要求说能不能出来。啊,能不能写成你写不出来这块啊,先不用管,就N呢,你套过来是等于三的是不是。啊。然后三不等于一走这了,那这是几啊。什么呀?三加上什么sum括号二吧。
09:00
哎,我重新说一下啊来。重新说一下。就是这个是三三过来之后不等于一。那这块。我们是不是这个代码就会变成什么,就会变成return什么三加上什么some几。急啊。二呗,是不是好,那我问大家SUM2,注意啊,这个return还没有执行呢啊,只有那个加法运算算完之后,这个return才会执行。这个加法算完之后,这个return才会执行,Return执行这个方法就结束了啊,然后接下来怎么着呢?我们SUM2,大家看看SUM2这块怎么着,二传进去是不是,哎,二传进去之后怎么着啊。我这是啊。你走的是这个代码呀。传进二啊,二传进来。吗?这是。加上谁呀,哎,萨一吧,所以这个可以拆成什么。二加上什么SUM1嘛,对不对?哎,SUM1这块一传给谁呀?N呗,N等等于一是不是RETURN1。
10:08
那这个是不是就是一呀。哎,那三加二加一是不是算完之后return返回就行了。我们先来看看这个结果,好吧,看看这个结果啊。Java c编译Java运行好,大家看是这样。是不是,哎,没问题。零三啊,没问题,不对。数据不对啊,六。没问题吧,零三啊。嗯。我觉得呀,有必要给大家画一下这个内存图。啊,画一下内存图,各位啊。
我来说两句