00:00
那同学们来看一下咱们今天的课程,首先呢,我们还是老规矩,先把昨天咱们布置的作业做一个评讲,对吧,就是学完一个语言,你要去,你要是不做作业的话呢,实际上你很难驾驭这个语言,我们先把这个作业打开看一下,作业都非常的简单,我们过一下就行了。好,我们来先,呃,同样我们一边缩了一边把这个,把这个作业也给它写到这里,呃,我把它先建一个文件夹,叫homeworker。建一个包,诶,这是我们的家庭作业,Homework。好的,那么我们来看一下这里面的作业,我们先看第一个作业啊,第一个作业他说一个数字如果为正数,我们它对应的这个符号数,这个叫s number,就是符号数就取一,如果它是一个负数,那么它的符号数呢?这个符号数就为负一,如果它为零,则符号数为零。
01:00
呃,然后要求我们写一个函数来计算这个值,这个应该是非常简单的,呃,怎么样呢?其实就是用if else else if来进行判断就可以了。那你看这个这个代码就我就不说了,特别简单,你看这里对吧,我们这写了一个函数。啊,这是一个函数,那这个函数我做了一件什么事情呢?大家可以看到我接收了一个整数,对吧,我返回了一个整数,特简单,当然这里我用了多分支来进行判断,那判断的标准就是把它给出的这个需求。把它给出的这个需求做了一个翻译工作而已,那就很简单的,大于零返回一啊,小于零返回负一,否则返回零,那这个就特简单,呃,没没什么可说的,那就直接放到这了啊,放到这我就也不去写了,因为特简单,没有什么需要再给他交代的,需要交代的地方我一定会给他在,呃,在写代码或者演示啊,第一个题咱就过了,我们来再看第二个题啊,第二个题他说一个空的块表达式。
02:07
啊,块表达式,其实这里面就是我们所说可以放我们的这个代码块,那么如果里面什么都不写,它返回的类型是什么呢?显然它返回的应该是一个void,对吧,就是一个unit unit这么一个值,就这个这个东西,那么我们来做一个简单的测试。好,我在这里写一段简单的代码来进行一个验证,Exercise。Eer c01,这是我们的第一个练习题,对不对?那么我在这里呢?写一段代码来进行一个简单的测试。好,比如说我这里有一个有一个T来接收。啊,等于valt,等于什么呢?啊,就等于这么一个啊,这个块表达式,或者叫做就是里面什么都不写的一段这个代码块,那么我输出来看看它是什么东西哈,来T等于加上一个T,显然这个时候呢,它返回的是这么一个,就是VO,呃,Unit的一个值,其实就是等价于别的语言的VOVO。
03:19
那我运行一下。哎,看一下那这块输出的内容呢,跟我们想的应该是一样的啊,这写错了啊,这是小括号啊老师这写错了,是小括号,哎,一对小括号没问题,那么如果说大家可以来想验证它的类型的话呢,我们可以用这个方法对吧?用什么呢?就是提供的一个方法,就是T点啊t.is啊instance of,然后呢,把它的类型我这么一写也可以,那这样这个呢,我在前边已然讲过,它是用来判断你的一个变量是不是这样一个类型,对不对啊,这个肯定返回一个处。
04:02
返回一个处,我们来运行一下。我们来运行一下。好,我们可以看到这边返回的就是一个处。第二个我们就说完了,我们再来看第三一个题也非常简单,第三一个题呢,它是要求。把这一段Java的代码翻译成scanner的一个版本,说白了,他这个Java代码大家一看,它实际上是从十,它是从十呃变利到零,也是从大到小的一个便利,那这里呢,我用了一个这样的方式,就是这个大家看零到十,它其实是一个集合,只是后面呢,我用了一个rivers,大家可能第一次看这个呢,感觉很奇怪,这什么意思呢?其实就是把集合进行一个rever reverse的一个处理,就是逆序,那这个你们如果这段代码看不懂的话,我换一个写法,大家应该马上就了然了,来,我清写一段代码,让大家理解的更清晰一些啊,Exer c咱们的。
05:08
呃,应该是这是第第三个题的一个说明,那就这我写还是对应一下零三,那同学们看一下啊,各位同学。好,我写一段代码,大家来体验一下那个reverse的用法。比如说我这里来先声明,或者是要定义一个什么呢?历史的集合。这个对于我们来说还是很清晰的,就是大家以前学过历史的,我写一个历史的集合,大家看到我在里面写123O了。对吧,那么正常情况下我去输出这个list,大家先看一下输出这个结果是什么。对吧,显然它就应该是123,因为你本身就是写的,但如果我调用它的reverse方法。注意所几乎所有的集合都有这种reverse一个方法。那写到这。
06:04
那这个方法一写呢,我们再来看,它输出的呢,就是321,好,我们再来玩一把,同学们可以看到此时此刻它输出的呢,就是321了,其实这方就是调用了这么一个方法而已,那同样这个嗯,这个集合可以用reverse,那么我们这种方式也是可以用的,怎么写呢?比如说我这里写的是1TO。11TO,大家看1TO10,其实这边呢,它也是一种类似于一到十的一个便利,或者说看成一个一个集合,那么它也可以调用rivers,其实道理是一样的啊,如果这样一写呢,我们可以看到它也会输出,对不对,它也会输出这个内容,我们可以看到它返回一个range。啊也是,其实也是一个集合,只是十到一的一个逆序输出的集合,那这样子呢,大家再去看这个就应该理解了,其实它等价于这句话,等价于相当于是对零到十的一个集合的一个逆序,然后再输出。
07:11
啊,意思是一个意思,意思是一个意思,好,那这个第三个题呢,咱们就说到这里,我们紧接着看第四个题,第四个题他说要求写一个过程。啊叫countdown,然后呢,可以接收一个整数,打印N到零的数字啊,打印到零的数字,那这里面我写了写了这么两种方式啊,两种方式大家看,第一种就是用前面刚刚学过的这个reverse的方式,这个就不讲了,刚才刚刚讲过。那么我们再看还有一种方式呢,就是用这个for each,这个大家可能看起来有点不太好理解了,那这样子啊,我把这个呢,单独的拿出来给大家讲一下,这是第二种形式,我单独的说一下。这个地方这里这里我们使用的是使用是第二种方式,第二种方式,这种方式呢,大家现在理解起来有点困难,为什么呢?我使用到了一个高阶函数的特性,这里使用到,哎,这里使用到高阶。
08:21
高阶函数的一个特性啊,那么什么特性呢?来,各位同学,我们先来给大家说一下这个逻辑是什么样,我一步一步的解释啊,各位同学不着急。那么这是我们的第四个练习,我新建一个小文件来给大家证明一下,一个ERC04对不对,那么我写一个object,大家注意听好,嗯,这段代码我们看别人代码的时候呢,可以这样子,先不要着急,一步一步的来。一步一步的来好这个N,假如我先定义好。嗯,假如呢,是就就写个三吧,简单一点好啊,同学们看到这一段代码,我相信同学们都很清晰的知道,其实它会返回一个集合,对吧,而且是把你这个零到三一个逆序的集合,我们来接收一小把。
09:16
哎,各位同学请注意听讲啊,那现在呢,我把这个打印出来,相信这个大家应该很清晰知道它会输出什么,对吧,那就是走一个。走一个,它返回一个什么呢?诶,它返回了一个range range也是一个集合,那么我们可以看一下对不对,可以看一下后面我们单独说这个,这是一一个集合,我就先暂时不说这个,它返回的是一个集合,从这返回了,返回了什么呢?它返回了一个这样的内容。反回来内容,但是呢,他又紧接着对这个集合调用了一个for each,那么我们来看看for each到底干了什么事情,对吧,我们现在呢。
10:01
呃,这个地方我先把它。不输出了啊,我我这地方是输出这个我先写到这,然后呢for each,我们来研究一下这个for each是什么来。点它有一个for each,我们现在lawyer同学们看for each呢,这里前面这个是一个泛型,我们现在还没有讲,那么我们关注的是后面这个东西,F冒号,呃,小括号int,然后这有一个箭头U,这个代表呢,这个for each,它是一个高阶函数,它可以接收一个函数,什么样的函数呢?什么样的函数呢?就是呃,输入一个int,然后这个返回值为。没没有返回值的这么一个函数啊,我先说到这里,那么我们可以先进去看一下走。哎,同学们可以看到它返回的其实就是这么一个东西,它可以接收这么一个东西,那我写到这。
11:02
啊,我写到这里,大家,诶,我在这啊同学们稍等片刻,那么这个for each的原型for each这个函数啊,函数它是这么一个形式,它这里可以接收这么一个东西。好啊,那么这么一个东西是什么呢?其实就是接收一个int,然后没有返回值,即即接收。一个什么呢?输入参数啊,输入。输入参数为一个int的,Int的,然后输出为什么呢?为unit的啊,输出参数为这个类型的啊,这个类型前面应该是个泛型啊,输出为U的这么一个啊函数。好,那么呃,那么这样子呢,我就可以这么去做了,怎么做做呢,我直接输出给它输入一个已经系统已有的一个方法叫print。
12:05
你看同学们看这个print LN,它是不是可以接受任何数啊?你看这个print LN,其实它可以接收一个这样的,它可以接收一个什么呢?你看这个就满足我们的条件了,你看。这里面是不是它可以接收一个any类型的一个值,那当然也就包括了它的输出呢,是个unit,诶,那我把它放进去,它就会怎么样呢?注意听这句话的含义是这样子的啊说明一下下面这句话的意思是含义是将。RESULT1的每个每个元素元素注意听元素遍历出来,遍历依次啊,依次遍历出来,每个元素依次依次遍历出来,出来传给。
13:00
传来呃传呃便利便利出来啊出来,然后传给什么呢?传给。传递啊,传递给print。它其实就是这么一个东西,艾伦这里面把这个值就传进去了,那有些同说是,嗯,为什么这个地方你没有把这个参数写进去,注意这里面只需要你只需要把这个函数名写清楚就可以了,而它里面这个底层。这个底层函数,它会将这个R的引用拿到,然后在底层把这个R里面的东西便利出来,然后扔到这里面去依次调用。一次调用仅此而已啊,那么我们来,我们来这样子就可以输出了,来走一个。啊,走一个,我们可以看到此时此刻它就会打印出这个3201,这3201就是刚才我们写的,啊写这个东西,那如果这个大家现在还看不懂,我可以再给他换一个写法,就说说老师你这样写掉的是人家系统的函数,那我能不能自已写一个也完成这样功能呢?当然也是可以的,你比如说我这样写大家可能就更加清晰了,说老师我不想写字,这个你调用系统的我有点看不懂。
14:21
你能不能自已写一个呢?来同学们,我们自己写一个也可以完成,这样就完成这样子一种给他传一个函数进去的功能,比如说我自己写一个,我自己写一个my print能,那这个函数就随便写啊,比如my show也行,大家可能对这个名字有点还是还是集限到这个名字的啊,因为这里面属于一个函数式编程的一个特性。其实这边已经体现出函数式编程了,什么呢?它可以传传输一个函数,让这个函数对你这个集合的每个元素进行。处理OK,那现在呢,老师写一份DFMYSOMYSO,我要干什么呢?我要干什么呢?我要接收一个int类型,那么返回类型是什么呢?用例,然后我在这里边,我在这里边去输出这个N完事。
15:14
那你看啊,同学们,我把这个改了,我注销这段代码,我注销这段代码,然后我2.foreachforeach,然后把我的my show穿进去。No problem。这样我相信同学们理解的更到位了,说老师,哦,明白了,那就是说这个r for each,他把整个这一段这个这个MY函数给你拿到,MY数函数拿到,然后他在底层,就在这个for底层对这个res进行编理,然后把这里面每一个值依次传进去,那么我请问同学们,我请问同学们,请问我这个my show在底层,在这个for里面会调用多少次?会调用多少次,我这写的是一次调用多少次,应该是四次,是不是应该是四次啊,他那首先我们看看结果,我们先看结果啊,大家不着急,我们看结果跟我们想的是不是一样的,是不是一样,是一样,那么我们刚才老师说的是将re每个元素依次遍利传递给这个,那这个地如果是这个地方的话呢,那就是传递给我们的MY受了,只是它这个地方呢,做了你没有不需要你传一个你你不要你不需要传这个东西了,因为他接受的是一个函数的一个引用,或者是呃。
16:35
就就传递一个函数的一个引用,那这个时候呢,如果按这个就是将R的每个元素遍历出来,传递给我们的这个MY。那么这里面一定要搞清楚它一共调用了几次,否则你在这看着就有点蒙圈,有点蒙圈,来,我给同学们专门打印一下。啊,其实呢,他一共调用了四次啊,一共调用了四次。
17:01
好,同学们可以看到,诶,你看它相当于在底层,先把这个三拿到。然后输出,再取出这个二,再调用我们的这个MYSO,以此类推。所以说它这里面其实就是函数式的一种特点,就是我传一个函数,让这个函数反过来去调用我集合里面内容就这么简单,那呃既然我可以呃一步一步的分析,那么当然就可以一次性把它写完。对,这个一次性写完大家以后就知道了,其实这个就是先用revers处理,再用for each处理啊,OK,好,这个当然你可以写在一起,就是我是分步写的,那么也可以就一步搞定。一步搞定,那么如果是一步搞定的话呢,我们这就可以这样写了,OK,那么我在这专门用一个隔线隔开,大家注意听哈,然后呢,我这写一个一一步搞定的,就是这样子点for each。
18:01
好,然后呢,呃,这个地方你愿意用my show也可以,你愿意用系统的也可以,那我就还用系统的吧,好,我用系统的。好注意啊,当然这个系统它本身就可以接收这里面任何值啊,那这样再一运行,同样的效果也是可以出来的。OK,好,同学们可以看到一样的好,这个题我就评讲完毕啊,我就评奖完毕啊,那么这个评讲呢,干脆我把这一大块给同学们也放到这里面去,因为我这儿做了一些说明,在这里没写啊。就是详解详详解啊,对代码的,对这个代码的详解,OK,好放到这里啊好,第五一个题也是异常的简单,异常的简单,他说请编写一个for循环,这个对我们来说没有压力,但是呢,人家要求呢,计算字符串中所有字母的unicode的代码的乘积,什么意思呢?就是将这一个哈,每一个字符取出来,转成一个整数,然后把它结果给我算出来。
19:06
那这个对我来说太easy了吗?就for。For对这个字符串进行一个遍利,我们都知道字符串的本质是字符数组,字符串的本质本质啊,本质是字符数组,所以说它仍然可以当做一个集合来编历,那你看我这变利出来了,哎,变出来这有个I,那就是第一个是H,把它转成同纳,然后呢,进行一个呃心等的累积,求求求乘积,好,这个我就不去举例了啊,相信同学们应该能够搞定。这个我就不举例了。第六一个题,第六一个题呢,他说同样是解决前面第五个题问题,请用string OPS的for each解决,那这么他又要我们用这个for each了,好,我相信写到这呢,同学们肯定又看不懂了。其实这里面呢,其实这个地方的本质就是刚才老师写的这个方式的一个。
20:06
你直接它,你原先这个负是把一个函数直接放进去了,那么函数的名放进去了,那么它也可以直接写一个匿名函数直接扔进去,那我给大家举个例子啊,那我改一下,大家一看就明白了,我把这个拿过来啊,注意听讲这块稍微的听起来有点就是也不是不是有压力,就是一个新的形式,那么我把这个写到这来,同学们来跟着老师动一下,我这写个第六一个小案例,Exer c06。好,Object,那么大家看我的案例。异常简单,这个代码,这个代码它是什么意思呢?我这做一个解释。这里我们解释一下。啊,怎么理解这个解释啊,怎么理解这个东西呢?第一点,首先大家看这一句话。我,我相信这句话大家知道,其实就是把哈里面的每一个字符取出来。
21:05
对不对,然后交给他,诶这个是什么呢?其实告诉大家这是一个。传了一段这个匿名的一段代码,那我这样写啊,同学们,这个我先做一个做一个改进,大家可能一下就明白了,我写这样写,我写一个叫做my account。一个函数,注意听这个my con的这个函数,我我写到上面去。我为什么写到上面去,因为我不写到上面去,我没有办法用这个res变量。我我们先不看这个代码,同学们你们先不看这段代码。我给你们改写一下,大家可能一下就了然了。啊,改写一下。好,这是我一个my count干什么呢?好,这个my count我要接收,接收一个这样的值,接收一个什么呢?它遍历出来,这个它遍历出来是一个char是吧,是个叉,好,我先接收一个char。
22:04
CH。对,这也是差,然后然后各位同学们看到我这开始写了啊,Is乘以,注意听乘以等于char to能差to能。欧了。大家看这句话能理解什么意思吗?就是传进来一个差,然后把这个char转成一个整数,呃去跟这个R呃相乘积的一就最后累积起来,是这意思吧?哎,这个我相信同学们能懂,这个你要看不懂说不过去啊,说不过去,那我现在这样写,大家看能不能理解呢?能不能这样理解呢?就是我,哈喽。hello.for each就是结合刚才老师讲的那个逻辑啊,For each是不是?诶,同学们看是不是,现在他就说我可以接受一个char了,哎,当然同学们可能讲到这好好神奇,说老师我有点蒙圈了,你刚才写的那个for不是他是接受一个in特吗?但为什么变差呢?注意啊,这个地方它会根据你前面这个集合是什么类型来做这个泛型的转换。
23:12
诶,如果你是字符串,它就会恰,如果你是,呃,前面写的这个集合是1TO10,它就是特,因为它会根据这个应用场景,编译器会去判断你的这个集合里面的元素是什么类型。OKOK,好,这样子你们就明白了,人家这地方是自动变化的,自动变化的好,既然如明白这个东西,我相信同学们现在应该理解了,如果我把这个放进去,能理解吗?是不是跟刚才一样一样的,好,同学们,当我这样做完了以后,是不是我在这个函数里面也是一样,每次把这个H相当于第一次把这个H放进去,把H的这个成绩算出来,再第二次调用,又把E进行一个累积,是不是这个意思啊,最后因为你这个RH的变量是不是在外面写的。
24:03
它相当于在这个在这个命里面,它针对这个麦抗来说,是不是这个res是它的一个外部变量。啊,甲法里面也讲过,那说明它的作用力是不是在这里面是同一个呀,这个肯定能理解好,同学们,现在我们就可以打印出这个re ES等于多少了,加上2ES。这就求出来了。相信同学们应该能理解了,那你看这里面结果就跟我们想的是一样的,941508跟他说的这个结果是完全一致的。好,既然这个能理解,既然你这个能理解同学们。那么我相信同学们这个也就能能理解了,怎么个意思呢?不要这个了,啰嗦,怎么样呢,直接。将这个给我扔到这儿,其实你的本质就是它吗?但是这地方恰是没有的,它用什么来替代表示你这个礼品便利出来东西呢?下划线搞定。
25:05
消化性个这个这个东西就相当于它会自动的去判断,就相当于这个呢,就替代了你每次遍历出来这个H明白了吗。啊,就说这个下划线,就相当于每次你说哎,就取取取个H2取了一个E,它每次就是在不停调用好这两个就是其实是等价的,就是很多这个卡程序员呢,他觉得没有必要写这个麦,我就直接把这个代码传进去就完事了。啊,传进去完事儿了。你明白意思吧,当然这个地方有很多准略的地方,你们现在是看不懂的,你们现在是看不懂的,因为什么?因为严格的说这个只是代码体,如果要写的完整一点的话。它前面还有这个参数。啊,它类似于这种这种写法,但是因为你这个行参传递在只有一个,而且在这个代码体里面只出现了一次,它就把这个。
26:06
省略掉了。好,后面还要讲啊,就说因为你这个这边取出来的只有一行参只有一个,而且在他的代码体只出现了一次,因此呢,他就直接用这个来替代了,就这么一个意思,好同学们先暂时理解到这啊,因为这个东西呢,我讲到这,应该同学们大致大部分同学也都能理解了,好理解了好这两个是一个意思,那么现在同学们我把这个给大家再运行一下,看结果是不是两个都是。一样的啊,那这个不行了,这个相当于说已经又累积了一次,那这样子啊,我再写一个RS2。两个比较下一大写的L,那么这里面应该是RES2,那我就相当于把这个换成RES2好不好?就是把把这个变量拿过来用吧,二一十二。好,这个地方我看一下啊,对对,这个不行,这个是什么呀。这个你你要变化是不是要写Y呀,诶这个地方也变成二,同学们看这两个结果应该是怎么样,一模一样的来跑一个,同学们请看运行的结果是不是一模一样的,哎,怎么不一样了啊,是一样的啊,是一样的是不这顶出来我说怎么多了一位哈,这就二吗?这是一样的,好同学们,这个我就说说到这里,所以大家理解一下,好,我把这个解释呢给各位朋友放到我们的笔记中去,就是加深了一个对他的一个认识。
27:28
好解释代码的解释对不对?好,写到这里来,好,我们紧接着看第七个题,第七个题就简单很简单了,他说编写一个函数叫product,然后一个字串计算所有字母的UN的图,这个没没问题,比刚才还简单。为什么简单,因为它就是一个一个遍历出来,这个这个没问题吧,就是R乘,乘完了后把这个R返回去嘛,这个这个我就不讲了,因为这个题比刚才这个题要要简单很多,好第八一个啊,第八一个他说把第七个练习中的函数改成递归,看到没有递归来了。
28:06
那递归他他的意思就是说你不要用这种这个这这种for循环了,别用这个for循环,呃,因为你这个for循环里面呢,他认为这个有一个R是用的外部的变量,他说你别用了,你用什么呢?你用递归吧,那递归怎么写的呢?非常的简单,就是这段代码。啊,这个我相信同学们应该是能够看懂的,看一下啊,怎么写的。你给我传一个珠串进来。传一个字符串进来,如果我写到这儿。大家注意听,如果你的你的这个长度,你的这个字符串的长度为一。为一,那我就干什么呢?就直接把这个字符串的char艾,就是这个是S4字符串嘛,Char艾零就是取出这个字符串的第一个,相当于就是把它自己取出来,这个就是差在同纳啊啊图纳,其实你这不写应该也可以是吧,字符串直接转成一个图浪应该也是可以的,就也可以啊,那么这写了个char艾也没没也没有错啊,如果是干什么的,就直接执行。
29:09
直接直行直接返回,返回这个字符串对应的呢,看到没有,直接返回这个东西能理解好,那如果说你不是等于一,那肯定就大于一了啊,如果不是大不是等于一,如果不是等于一,那怎么办呢?哎,你看我这样写的,Else,我就先。把把你这个字符串拿出来TAKE1,大家看这个TAKE1能知道什么意思吗?T1是不是取出这个字符串的第一个?第一个字符,呃,字符串就第一个字符,当然返回它是个字符串。啊,这个这个地方我先解释一下啊,我先把这个给大家解释清楚,这个s take1。就是。就是返回S的S的第第一个第一个字符,当然这个时候它返回,返回的类型呢,是个十寸。
30:03
啊,返回这个尺寸,然后再对,把这个CHAR1拿到,就是把这个第一个字符拿到,转成一个char,再转成同样,然后再跟屁股后面这一堆取。那么这个地方S1代表什么呢?就是去掉第一个后面的所有。再说一遍啊,这个我就不去举例了,同学们应该有个理解能力啊,如果你这个还听不懂的话呢,呃,那肯定是应应该不应该的啊,这个是返回的是S除S字符串除去除去掉呃除呃,SS字串的这个。那个后面的除去啊除去。啊,除去除去第一个字符的字符的后面所有的后面所有的后面所有的字符啊,然后也是返回组串。OK,那支符串你传进去了,好,这个呢,我们给大家演示一下吧,我就把这两个函数给大家讲一下就行了啊,重点我就在这两个函数,其他我就不说了,那么我们把这段也写一段小代码,进行一个测试。
31:10
好,Ex,这是零八了,我看是不是零八。啊,应该是第八个,第八个啊,各位朋友第八个给他演示一下这个这个这两个函数的特点,那么我写一个字符串啊,注意听啊,是最。啊,等于就就写个hello吧,非常简单啊,非常简单,那同学们看啊,我们先看刚才写的这一个,呃,就是刚才我们写的take。Take,你看这个take呢,它返回的是rapid的string啊,然后呢,我写个一,同学们看到这个地方返回的结果啊,要确定两点,一个是类型,一个是值是什么,我给他拿一下,我给他拿一下,比如说呃,取出来一个值,相当于看成一个子串吧,看成一个子串一。呃,它是什么呢?我们来看一下类型先。你看看一下啊,这个类型就是一个字符串。
32:01
那这个字符串是个什么字符串呢?就是H啊,它就是H。把这个理解清楚了,其他后面都比较好理解了,这个其实就返回的H。那么看是不是H。运行下。运行一下,我们发现的确返回的就是一个H。And,没有跑起来呢?啊这这个是这个是class啊啊这个是这谁谁谁谁写的呀,对不像话啊class了啊啊来跑起来啊跑起来我们看到H取出来了,那么这个相再去取那个差呃艾零就是就相当于把这个H转成了叉,再转,其实其实这个地方也可以直接浪啊,也可以浪,其实这个地方没有没有必要再去做一个char,可能大家看起来还还有点麻烦,就是你你也可以这样子就直接把这个叉去掉。应该结果也是对的啊,应该我们试啊,呃,同学们试一下,可能拿掉应该也是一样啊,应该也是一样,因为只有一个嘛,如果你是两个,那这个就就就不对了,它因为就一个字符啊,一个字符的字符串,那那不要这个应该也可以好,这是第一个就说完了,我们再看第二个子串十寸二。
33:19
啊,十寸二,十寸二呢,它这个啊同学们,它是个drop drop1这个地方呢,诶我们看它的类型呢,同样也是一个十罪,那么它返回的是什么呢?各位同学,它返回的就是后面这一堆。哎,对对,那这样子你你们就知道了哦,他始终是第一个往屁股后边追,这样子他就低轨起来,好跑起来,错了啊,哪写错了。啊啊,这是写的啊,这写的二啊对对,好,再跑一下,同学们请看效果。啊情感效果,那这个就是好,这个大家应该知道了,就第一个跟屁股后面成那地柜下去,最后呢,他一定会追到哪个位置呢,追到把每一个。
34:02
字符都拿到,然后就不停的这个递归往下层层层堆上来了,好,我相信这个应该同学们也能理解啊,我把这段代码的一个简单的解释也写到这里。啊,代码的解释,代码解释好了,我们紧接着继续看第九个题,第九个题其实基本上就是个翻译,看起来很难,其实这个最简单。啊,其实这个最简单,他说求XN的这个幂啊,或者N的多少次方都可以啊,理解啊,他说N是一个整数啊,请用递归来解决,他说XN等于X乘以N啊,乘以X的N减一次方,那么整个这个N如果是正数的话,就应该是这样子,那就说如果它大于零的话,就是这样写的,如果是零次幂,那就是一。那如果这个N是一个负数呢?就是一除以X减去N,那减N这个。负数取反不用变成正数了吗?对吧,就是一除以N啊X的这个负一的这个这个次方,那么最后呢,他说不允许用return啊,不允许return那就简单了,看这样写的。
35:10
呃,第一,首先你要你这么这个地方的难度啊,这个题的难度,这个地方的这个题的难度主要体现在哪里呢?它的难,它的难难点。它的难点就是你要把这个函数的这个形式写出来。就是你得你得知道它应该有两个形参,一个是X,一个是N,这点你要去确定出来就没问题了,那几乎就是几乎就是一个翻译工作。如果N传进来,这个N是零,那么不管怎么样,那就是返回,就是一,就是我不管你X是什么值,只要你这个你这个你这个幂是求对它求零次幂,那它就是一。对吧,那如果说你这个X大于零呢,它就走这个逻辑,这个逻辑是什么逻辑呢?就是X去乘以递归,递归就是把这个X乘一,然后就N减一,因为你这个N减一不停的减减减,最终会会到哪里去呢?到这里去。
36:12
好,那就是相当于这个相当于就把它不停的乘起来了嘛,好,如果你这个N呃是小于零,就什么呢,就一除以幂AX减,减去N减去N呢,这个它在计算的时候,这个负数一减又是正数,所以说又能又能调起来,其实就是一个翻译啊,就是一个翻译,其他就是翻译,就是难点是什么呢?确定。确定这个函数的什么呢?一个形式啊形式或者叫行参都可以,然后其他就是翻译工作,翻译一下就可以了。其实这个看起来难,最难看起来呢,其实它是最简单的。好,同学们,那么我们的作业呢?老师就评讲到这里。
我来说两句