00:00
那么地归呢,我这还有几个案例,我们来一起看一看就可以了啊,地归他最有意思的地方呢,就是它是它并没有,它是直接告诉计算机做什么。而不是告诉计算机怎么做,我们来体验几个特点,比如说我们要求最大值,要求最大值如果我们自己用递归来写。好,那么你们看一下怎么写呢?你看这里。我这里写了一个max。比如说我要传入一个list。那么传一个list的,我要求这个list里面最大值,我怎么写呢?我是这样写的,就是我们自己写递归来完成的啊,你看这样写,如果这个历史等于空,就是一个数都没有,我就抛出一个异常。那如果这个传入的list它只有一个,就直接把这个头给他返回去就可以了。那如果说还有一种情况就是这个头,这个头它大于了,它大于了后面的所有尾部的一个数,就有可能是啊,那么就把这个头返回,否则往里面继续继续执行,你看这个代码呢,我们来给大家运行一下。
01:19
我们来运行一下,这个叫递归,求最大值,我们跑一跑啊,IVE。然后呢,求这个最大值,求谁的最大值呢?求历史的最大值。如果这个代码让你们自己写,你们想想自己能能不能写出来,好,大家看。这个代码应该没有毛病啊,我们这用的递归。使用了递归,求求谁呢?历史的中的最大那个元素。元素是谁?那你看我的思路啊,很简单,你看你体会一下,他这个代码写的还是很很有意思的,如果为空你看。
02:06
如果为空抛异常。如果为empty pity,就抛出异常分解,那如果说你只有一个元素,你看它把这个条件就找到了,如果有一个元素。一个元素,那就是这个值。就是他。还有一种情况呢,就是else else,如果你这个头。大于了它的这个后面的就是把它尾部进行比较,当然这个它大不大于呢,要递归往里面走啊,如果说它大于了,那就是头,否则就是尾,但是它这里面不停的递归,就把这个头不停的拆解。你看这个看起来从从代码上来说呢,他很优雅,但是呢,从理解上来说不太好理解了。为什么不好理解,因为递归一进去,你就是计算机在帮你做,你从这地方可以理解,理解到刚才我们说的一句话,什么话呢?递归是告诉计算机做什么,计算机做什么,而不是而不不是,而不是告诉计算机怎么做。
03:20
这个有点不好理解啊,而不是告诉你怎么做,因为怎么做一般是迭代来做的,就这个迭代要把那个步骤写的很清楚,迭代一般是第一步怎么做,第二步怎么做,第三步怎么做,他呢很简单,我就直接说投大于后面的吗?如果大于就反他,否则继续往里面追。你你自己看这个代码都觉得很神奇。它就给你求出来了。它就给你求出来了,那么我们看一个结果,它能不能求出来呢?来我们运行一把,比如说我现在写了一个历史的一就一个元素,那么我写max。OK,好,这个当然一个一,那么直接反成为这个数了,那就是多少呢?那就是一。
04:06
对吧,那它返回的就是一个1O了,那假设你再来一个数,比如说一负一,再来一个99,好,我们看这个地方它返回的是多少呢?OK,好,我们发现它返回的就是九。你都不知道怎么做出来的,说实话,如果让你自己去写啊,同学们,我如果要求你们自己去写这个历史的这个最大值,你肯定最普通方法就是先便利。噼里啪啦编了一顿,然后发现哪个大,就把指针指一下,最后发现指针最大的一个索引,然后返回来,你肯定这么写的吧,那个代码得写一段呢,它这个地方就很简洁,你看到没有优雅体现出来,但是理解的确不是那么好理解的。OK,好,这个就是我举的第二个案例,就是求最大值,体会了我们递归的优雅性,但是呢,理解确实稍微麻烦一点。来吧,我写到这里,这是我们写的第二个小案例。
05:07
OK,那么这边我们讲的是用函数来解决这个问题,应用案例又是一个应用案例啊,这是我们又一个案例写出来。那么我们这次讲的一个求最大值的递归方式,来吧,不着急啊,我们把它板书到这里,那我把这个代码写到这。给大家扔到这儿来。哎,这是一个用用递归求最大值的一个方式截取的。
我来说两句