00:00
好,我们继续来上课啊,这节课呢,我们再来看一下我们的这个递归函数啊,那么递归函数呢,也是一个重点啊,那么当然在现阶段呢,我们用的很少,那么在我们后期去学习便利目录的时候,我们会经常去用到递归,那么怎么叫递归函数呢?递归就是在函数当中调用自己本身,那么这种结构我们就会给把它叫什么叫做递归函数了,那咱们来看一下啊,在这里边一样,我们也去演示一下,新建一个这个。PP的文件啊,叫做17,我们演示的就是递归,那么咱们先来想一下,到底什么是递归,那在这里边我给大家举个例子,比如说我们在小的时候,经常会老师给我们讲故事,讲什么呢?叫做从前有个三。93。山里有座庙。庙里有个老和尚。给小和尚。角。故事。这是我们小时候经常讲的,那讲的是什么讲的?
01:00
是讲的是什么?讲的是不是依然是从前?从前有座山,对吧,然后呢,依然是什么?山里有个庙,庙里有个老和尚给小和尚讲故事,对不对,那讲的是什么呢?讲的是不是还是依然是从前有个山,山里有个庙,庙里有老和尚给小和尚讲故事,是不是还是这个东西,对不对?哎,那这里边到最后还是一样,那讲的是什么呢?讲的是比如说到这儿啊,讲的是叫做这个。比如说童话。故事里面告诉。我们是白雪公主,跟什么?跟王子好了。好了。好了,对不对,那是不是当到这为止,是不是才讲完,你想想,比如这是什么?这是第一个人在讲,这是第二个人在讲,这是什么,这是第三个人在讲,这是不是故事了,对不对?也就是说你看啊,我们重新捋一遍,你看从前有个山,山里有庙,庙里有个老和尚给小和尚讲故事,对吧?这是老和尚一给老小和尚一讲故事,那么讲的是什么呢?讲了一次,还是前有个山,山里有庙,庙里有个,比如这是老和尚,是不是又出现一个新的人物了,对吧?那比如这是二老和尚二给小和尚二讲故事,讲的是什么呢?讲的是不是依然是从有个山,山里有庙,庙里有个老和尚,老和尚是不是就是相当老和尚的山给小和尚山讲故事,对不对?哎,那讲的什么?讲的是不是童话故事里告诉我们白雪公子跟王子好了?
02:24
对不对,那你想,那当遇到这个故事了以后,那。这个的老和尚给小和尚是不是讲完故事了,对不对,也就是说这个三。是不是就讲完了。讲。就好了。对吧,那你想那三这个故事讲完了是吧,那这个二他们是不是也讲完了对吧,那也就是这里面的二。是不是就讲完了。讲完了吧,哎,那他要讲完的话,那你想这个第一的这个人是不是也讲完了,对不对,一是不是也讲完了。
03:03
讲了,哎,那么这种结构就是什么叫做递归啊,递归是两步,先是干嘛往里边递啊,递到里边以后再干嘛呢,再往出什么呀,往出归啊,这就叫做咱们的递归啊,就好比我们比如说坐公交。坐公交去银行,可能你需要过几个几个街道,对吧,比如说你过这个一号站。一。哎,输入法了。一号。对吧,一号站,然后呢,又路过二号站,又路过三号站,最后到达了哪儿,到达了银行对吧,那你们去银行取完钱以后,你是不是还回家啊,回家你是不是又开始从三号站开始坐车对吧?路过二号站,最后再到一号站是不是下车。是不是这样的一个结构,哎,这就是咱们的什么,咱们的递归啊,那好了,那咱们来看一下,那我们用代码来实现一下,比如说方程,这里面我们定义一个AUM给它传一个什么呢?传一个变量,你就传给我一个变量,传过一个变量以后进来,我来输出这个变量,输出这个A,再来输出这个N,好了,那这块输出两次,注意啊,输出两次,那比如说我调用am啊,这里边我传一个传一个二级来吧,啊,那传一个二进来是不是一调用是不是就输出了两个二啊对不对,但这里边我再来,我来做个判断,我说如果AUM。
04:20
这个要是大于零的话啊,大于零的话我干嘛呢?我就继续调用AUM,传一个什么呢?传一个A减一啊,把A的减一的结果传给了他,对吧?然后否则L我再来输出一个横线,那你看在当前这个函数中,我是不是遇到了自己调用自己呢,对不对,是不是在这里边调用自己呢。哎,那么自己调用自己这种结构就叫做递归啊,这种结构就叫递归,那么最终它输出的结果是多少呢?那你看我们来看一下它的结果。四七来,你看210,然后横线,然后是吧,012,怎么得到这样的结果呢?咱们看好了,我把这个函数啊,原封不动的复制一份CTRLC复制到哪里,复制到我们的这个画图里面。
05:13
这是不是我们的结构对吧,那这里边我同样啊,给他一个括号吧,来括号。这块再来括号。合肥。其实有的,只是我们这个颜色啊,是不是有啊,这里面是不是也有啊,哎,好了,那就这样吧,啊那。把它颜色给它变一下。呃。这块还有个括号对吧。也给它变一下颜色。还有这里边。
06:05
还有这块。好了,那你看我们代码是这样的,对吧,那么我传的时候,我是不是传了一个等于二的。是不是出了一个am等于二啊,对不对,那好了,那就先这样啊,那接下来咱们来看我把它先复制一份出来啊。CTRLC,好吧,咱们来看啊。我们进来调用它,调用它是不是传一个二,传一个二传给谁,是不是二复值给了他呀,付给它进来以后输出输出谁是不是输出二,输出二先不管这个义务判断,这个异务判断,先不管在这块输出输出谁是不是也是输出R对吧?在这个二有输出吧,没有吧,为什么?因为他得先等到if执行完以后,是不是才能输出这个R对吧?所以进来我们输出第一个值点是二,然后呢,在一步判断以后,问你问你二大于零吗?二大不大于零,大于零嘛,二大于零的话,那是不是干嘛,我就走到这个if区间,走到它,找到它干嘛呀,是不是调用这个东西。哎,调用自己,调用自己是不是相当于这个函数又执行一遍对吧?那么又执行一遍以后,也就是说通过它来调用的,又执行以后传的什么,传的是不是二减一的结果,二减一上几是不是一,是不是传了一个一过来,传一个一过来我进来,你说输出,输出它是不是依然是一,那么同样这里面输出是不是也是依然是一,但他有输出吗?没有啊,他在等等什么呀,是不是在等这个。
07:19
If执行完了对不对,那if执行完了,那是不是一样,If判断你这个E大于零嘛,一现在大不大于零,一是不是还大于零呢?哎,E大于零是不是又走到这个区间了,走到这个区间那好了,那你想想是不是我这里边又开始调用谁,是不是又调用它呀。对不对?又调用当前这个函数,那么又调用这个函数,是不是就相当于这个函数又执行一次。对吧,又执行一次以后诶。通过它来调用的,对吧,那除了一个什么。传了一个一减一的结果,一减一是不是为零啊,是不是把零传给它了,那我进来输出,输出它以后是吧?是不是零对吧?那问你零大于什么呀?零大于零吗?不大于了,不大于了是不是这个if区间就不走了,是不是走L值区间,走L区间是输出了一条横线,是不是输出一条横线,输出完横线以后,然后这里边我又输出,哎呀,N是几,N是不是依然是零?
08:08
对不对,那是不是输不出零了,那好了,那这个函数是不是就执行完了,那这个函数执行完了,那是不是回退回来,那这个if区间是不是走完了,这个if区间走完了,那好了,是不是开始输出它了,那是不是输出就输出个一,对不对,输出完一以后,那这个函数是不是也完事了,这个函数完事以后,那再回退回来,是不是这个一步区间又走完了,那这个一步区间走完了以后呢?那是不是L式肯定不走嘛,那输出底下是不是输出二了,所以最终结果是不是210,然后横线横线完之后是干嘛,是不是开始012啊,是不零一。是不是这样的,哎,这就是咱们递归的这个执行啊,这就是咱们递归的执行。啊,好了,那我们把它保存一下啊,在这里边我们来新建一个这个。呃。放online里边零一里面。
09:01
在这里边啊,叫做我们的地柜。好。递归好了啊,这就是我们最终通过这个递归这个代码得到的最后的这个结果,对吧?那么什么时候用的递归呢?你比如便利目录对吧,比如他是目录,问是不是目录,是目录怎么办?我这边打开,打开以后可比如说我一个一个去读,读读当读完以后呢,读完以后是不是就要关闭了,关闭是不是就回回头回来了,那你看我再读的时候,它什么目录,是不是目录,是目录又要打开,打开是不是又读,读完以后再关闭,你看每做这么一步,是不是相当于我这一个整个读取目录的时候,是不是就需要这这么几个操作,对吧?第一个操作干嘛打开目录对吧?不对,对啊,打开目录,打开目录之后开始读取,读取的时候判断它是不是目录,是目录,我就继续打开读。对吧,然后读完以后是不是就关闭,这不始终就执行这三步啊,所以在这里面你看,比如说我在这里面判断它是不是目录,是目录打开啊,打开以后开始往里面读,读每一个的时候,我是不是都判断它是不是目录,哎,他比如读它,它是目录,那继续打开往里面读,然后读完以后它没有目录,没有目录开始关闭,对吧?然后再来往下读,读的时候它又是什么,又是个这个目录又打开对吧?打开又开始接着往下读,这于这种便利目录的时候,我们用递归用的是什么非常多的啊,所以在现在这个阶段,你只需要能把这一个公式,这一个函数给我理解明白,知道为什么它的结果最终会输出什么,输出这个210横杠零。
10:26
幺二啊,知道这个结果就足够了啊,那么等到后期我们讲到这个便利目录的时候,我们会批量用到递推去便利,那么那个时候我再给大家再来巩固啊,所以现在你只需要把这个公式给我整明白啊,这个函数你能整明白,知道为什么输出210012就足够了啊,这就是咱们的递归啊,咱们所谓的递归刚才我也说了,是先往里面递,再往出归,对吧?有一个电影大家可以看一下,叫什么叫盗梦空间啊,怎么办呢?是先在现实社会中做梦,做梦以后干嘛进入到下一层世界对吧?在下一层世界里面开始去做你想做的事儿,那么当完成不了的时候,干嘛再继续做梦,做梦再去下一层对吧?当你完成以后开始干嘛,甚至一层一层再往回醒了,对吧,醒完以后是不是最后再回到现实来,对不对,所以这种结构就叫做递归,是递进去再归出来啊,是两步啊,好了,这就是咱们的递归。
我来说两句