00:00
好,我们来把这两个练习看一下啊,其实非常非常简单啊,我们先跟第一个定一个函数power来为任意数字做幂运算,就相当于是我们这个N星星这个,哎,那所以我们这先定一个函数,我们就叫做一个power power呢,这我们来一个叫做一个N逗号一个I啊逗号一个A,那这里边我们还是先写个我们这个文档字符串啊,把这文档字符串写上,我们叫做一个power函数,它干嘛呢?Power。它用来呃,为我们这个任意的这个什么呀,哎,数字做我们这个幂运算啊,幂运算幂运算,然后这里边我们有两个参数啊,两个参数一个是N,哎,一个是N是什么呀?哎,要做幂运算的数字。Me?运算的一个数字,然后我们这个I是什么呢?I是我们这个做哎,幂运算的一个次数啊,幂运算的一个次数啊,这两个参数好,那接下来我们来看,那还是咱们先别着急做对吧,别着急做我们说了递归有两个要件,一个我们叫做基线条件,还有一个是递归条件,对吧,递归条件,那现在我们来说一下,那我这个幂运算我要是我怎么我要怎么求啊,我们在这里写幂运算我要怎么求,比如说我要求这个,呃,这个这个十的这个五次幂,十的五次幂啊,我们先这么写吧,十的五次幂,那我这块是怎么怎么求的,那十的五次幂实际上是不是就等于十的这个什么呀,十乘以十的这个什么呀。
01:38
四次面。对吧,哎,十的五次幂就等于十乘以十的四次幂,那我们十的四次幂呢?十的四次幂呢,就等于什么?哎,就等于十。乘以十的什么呀,三次幂这是跟我们那个递归那个是跟我们那个阶成那个是不是一样的呀,那最终到哪了,最终到最后我们变成什么,变成我们这个十的什么呀?十的这个一次幂是不是就等于十啊,哎,十的一次幂等于十,也就是说我们来看看这个基限条件是哪?所谓的基限条件就是我们这个问题不能在拆分的时候,那个就是基限,那我们来看几次幂的时候就不能拆了,哎是不是一次幂的时候,哎,如果依次幂的时候,我们这个就是十,就不用再算了,对吧?就不用再算了,所以这个时候我们要看,如果是依次幂,我还用不用算了,哎,不用算了,所以基线条件就是什么呀,一次幂,那依次幂,我怎么判断一次幂是不是就是I等于一呀?哎,I等于一,所以这个是我们的一个基线条件,基线条件啊怎么写if,我们来一个I等等于一,这是在干嘛?这是求什么呀?这是求我们这个一次幂啊,求我们这个一次幂,一次幂的时候。
02:49
就不用再去算了啊,就不用再去算了,不用再算怎么办?不用再算直接return谁return n啊,N的一次幂是不是就是N呀,N的N一次幂就是,哎直接返回N就OK了啊,所以这是我们基线条件,然后第二个条件我们叫什么呀?是不是我们这个递归条件呀,哎递归条件,所以接下来我们来整一个递归的,哎什么是候递归啊哎递归条件,那其实剩下的情况我们是不是都要递归啊,哎都要递归,那都要递归,我就直接return return什么呢?哎,Return一个N乘以什么N减一的,哎,这个N的I减一次幂吧,所以这个时候我们要乘以的是谁?还是power参第一个参数还是N,但是第二个参数变成什么?变成的是一个I减一啊,如果你这要求十的五次幂,这就什么呀,这就是十乘以十的四次幂,如果求的是十的三次幂,就是十乘以十的什么呀,二次幂啊,就这么一个意思啊,就是N减I减一次幂啊,N减一次幂,那这样是不是跟那个一样啊,哎,基本上是一样的啊,我们来看结果对不对,直。
03:49
接下来打印一下啊,我们来打印一下print呢,我们来一个这个power power一个什么呢?哎,八的六次幂吧,八的六次幂,我这一执行得是不是得出这个数啊,这个应该是我们上边的啊,把它注掉。
04:02
把这个主点这一保存一执行,是不是这么一个结果呀,对不对呀,哎,我们来验证一下啊,验证一下怎么验证啊,咱们拍yon里边是不是有幂运算呀,所以我直接把。哎,幂运算来一个这个六啊,来一个六,我这一执行是不是结果是一样的,哎,那证明这函数叫没问题了啊,这里我们也是应用到的是一个什么呀,递归啊递归自己待会可以尝试来写一下啊,尝试来写一下好,然后再往下看啊,再往下看下边一个练习,我们叫做判断一个字符串是否是回文啊,是否是回文,那这样我们先把函数创建好啊,定义一个,那这回文啊,回文我们这一块创建函数名的时候,我们应该是尽量去使用什么呀,尽量是去使用我们这个英文啊,尽量使用英文,但是有一些情况下,我们英文记不住,像这个回文,英文我就记不住,挺长一个啊,挺长一个,但这个时候实在没辙,也可以干嘛呀,也可以用中文啊,也可以用中文,尽量使用什么呀,英文,这不中文,但也不是中文是什么呀,拼音啊拼音,所以这个我就简写了,我来一个什么呀,回文,这虽然不是好习惯啊,但是它可以临时什么呀救急,但是你千万不要什么呀,你千万不要英文这个还有这个这个这这个猪拼音混着写。
05:14
要么你就用纯英文,要么你就用纯拼音啊回文,然后这来一个括号,来一个冒号,这是我们这个回文啊,我们来说一下,还是先写一个文档字符串这个函数,该函数用来检查我们这个指定的什么呢?哎,指定的字符串是否是回文啊,是否是回文字符上,哎,如果是返回什么呢?返回处,否则返回false啊否则返回false,好然后这里边我们来说一下参数,你是不是得定义参数啊,参数我们就来一个什么呢?SS什么呀,你要检查字符串,你要检查哪个字符串啊,所以S是什么,S就是我们要检查的一个字符串啊,S就是我们要检查一个字符串。好那现在我们来看一下这问题,我们怎么来找,还是啊看到它呢,我们还是要先找基线条件对吧,但是它的基线条件没有之前那个数字那么明显,所以这块我们要看一下,我们要看一下就是说我们的地。
06:14
这个本质就是把一个大问题是不是拆分成一个一个小问题啊,所以我们先来看这个问题要怎么拆,还是这种方式,举例子,我直接来一个,来一个什么呢?ABCDEFG,然后这来一个,哎,来一个这个ABCDEFG,然后这fedcba,哎,这很明显是一个回文,因为我前面念ABC de fg f ED CBA,倒是念ABC deg f fedcba,是不是都是一样的呀,这也是一个回文,那现在我拿到这么一个字符串,我要检查它是否是回文,我要怎么检查,我要怎么检查,先说你你你你想想它的过程应该什么样的,我们说了回文字符串前后颠倒过来是不是都一样啊?所以什么意思啊,我的第一个应该和最后一个是一样的。
07:03
对吧,我的倒数第一个,倒数第二个和正数第二个是不是应该是一样的呀,我正数第三个和倒数第三个是不是应该一样的,它前后对位应该都是一样的,对吧,都是一样的,那所以这东西我应该怎么检查?怎么检查?哎,所以其实这个题非常简单,我应该是干嘛呢?哎,我应该是先检查第一个和什么呢?和最后一个是第一个字符和什么呢?和最后一个这个字符是否一致啊,是否一致,那如果一致,咱们先说,如果不一致,如果不一致,第一个和最后一个都不一样了,则什么?则不是回文啊,则不是回文字符串,因为你前后都不一样了,你前面是最第一个ZA,最后一个是Z,那肯定不是回文字符串啊,肯定不是回文字符串,那么说如果什么呢?诶,如果一致怎么办?如果一致能不能说明它是回旋字符串,哎,不能,如果一致了,那A前后一致了,我还用不用看A了,不用看A了,所以注意,如果一致则看什么呢?看我们这个剩余的部分是否是回文字母上。
08:17
懂这意思吗?比如说啊,这个例子,我们来看前边A和A一样了,那这时候还用不用看A了?不用看A了,我是不是只需要看BCB啊,如果BCB是回文,那是不是就是回文啊?同样这也是,我看前边后边都是A,那还用不用看A了?不用看A了,我直接看中间这部分,Bc de fg f Fed CD,我要看这段是不是回文,如果它是回文,那是不是肯定是回文了?好,那看他怎么看,还是先看BB跟B不一样一样一样,我就不再看B了,我要看谁,我是不是看c de Fed是不是回文啊,如果是,是不是就是回文了?哎,所以注意先看第一个跟最后一个,然后检查什么呀,剩余部分是这么一个东西啊,这么一个东西,所以它的一个流程什么,我先看它这个流程,我们是干嘛呢,先检查它是不是回文,然后干嘛,然后再检查谁把这个A。
09:13
去掉干嘛呢?哎,是不是回文,然后干嘛,然后再检查这一段,把前后两个去掉,然后再检查什么呢?这一对,然后再检查什么呢?把D也去了,是不是,是不是检查呀,然后再检查谁呢?检查这个fgf,然后再检查谁呢?再检查这个这那注意了,这时候我这个G还用不用检查G还用不检查一个字母是不是肯定是回文啊,哎,一个字母肯定是回文,所以我们会发现,当我把这个问题不断的缩小,不断缩小到这儿,是不是就表示就不用再检查了,这时候就不用再分解了,所以这个时候我们的基限条件就是什么,是不是就是当你的字母是一个的时候,哎,一个的时候,所以这时候我们来注意,我们来说一下我们的基限条件,也就说我们那个问题什么时候就不可分了啊,什么就不可分了,什么条件,我们直接来一个if什么呀,哎,论我们这个字符串的长度,如果你已经小于二了,什么叫小于二了,小于二我还有没有必要检查了,你说两个我。
10:14
这A这A我还得检查一下对吧,但是你小样你这只有一个,我还有没有必要再查了,哎,没有必要再查了,或者是一个只有一个B不用再查了,或者你这干脆就一空串,我还用不用查了,哎,不用查了,所以这一块是不是都是小于二啊,所以当你的这个字符二长度小于二的时候,这个时候我就不用查了,你肯定是什么呀,肯定是回文,你只有一个字母,或者是你没有字母,那你是不是都是回文呀,所以这个时候我直接return一个什么呀,触啊,Return一个true,所以这里边注意我们来说一下字符串的长度小于二了。小于二,哎,则我们这个字符串一定是什么呀,是回文啊,一定是回文就一个了,那就空串了,那肯定是回文好,然后再来看啊,我们这来一个,我们先用一个麻烦的写法,L if l if。
11:02
I在这我们要怎么查这里我们接下来要看什么呢?哎,我们接下来是不是要看这个,它的第一个字母和最后一个字母是不是一样啊?哎,是不是一样,如果一样,哎,咱们先,如果一样怎么办?如果一样怎么办?咱们先写什么?我来一个来一个第一个字母是什么S我来一什么呀,零这是不是第一个呀,然后干嘛呢?中号负一,这是不是最后一个呀,我们先说我们这不检查它一不一样,我直接来什么呀,不等于,如果第一个和最后一个不等于,我们来说一下第一个字符和最后一个字符不相等,不相等还是不是回文了,这时候它就不是回文字符串,不是回文字符串怎么办?我们直接return一个什么呀?Return一个false啊,Return false,返回一个false对吧,返回false,但是这个就相当于是我们基线条件啊,当满足这个条件的时候返回处,当满足这个条件的时候返回什么呀?负啊,反负,那有一种情况干嘛呀,两天都满足,既不小于二,而且这个前后干嘛呀都相等,那这个时候我们是不是就该递归了,哎,该用我们这个递归条件了,什么时候递归直接来写了。
12:16
来一个递归,递归条件,那走到这儿只能说明一件事,它的长度是不是至少得是等于二了,然后它的前后是不是也是相等啊,哎,也相等了,那在这我怎么办?直接来进行递归,直接干嘛呢?Return return,那也就是说我现在等于是A跟A相等了,我是不是要检查这个部分是不是回尾啊,哎,是不回文,所以这个时候我是不是需要对这个字符块进行切片啊,怎么切片,我要把前边的后边的都去掉,然后是不是检查这个区域啊,哎,检查这个区域,所以这我们要做的是什么?检查剩下的内容是否是回纹,所以在这我们要做一个递归,调用我们这个回文,这回检查谁检查的是我们字符串要除去第一个和最后一个吧,所以切面我们从哪取,从第一个开始取到最后一个,我们说了从第一索引为一开始取,那是不是就包括开始位置,那所以索引为零的是不是没有了,到负一结束不。
13:16
包括结束位置是不是最后那一个也没了,哎,所以这样我们就在检查什么呀,检查我们这个刨除第一个和最后一个,剩下那一部分是否是回文,这样我们就写完了啊,这样我们写完了,来我们来试验一下啊,试验一下直接来一个这个print print啊我们来一个这个回。回文,我来谁呢?我先来hello吧,Hello,很明显不是对吧,我这一直行什么玩意false啊false,我再来一个ABCABC直行是不是也是负的呀?再来一个abcba啊,一保存走一个是不是处啊哎,再来一个把我刚才这一长串给它整过来。
14:00
保存走是不是也是数啊,哎,也是数,那我们这个回文这个函数也就写完了,哎已经写完了,那这个呢,稍微的麻烦一点,因为我们这做了什么呀,哎,做了两个判断啊,两个判断也就说我们这实际上设置了两个基线条件啊,两个基线条件,当然这个东西你这么写也行,或者我也可以换一种写法,怎么写呢。我在这只有一个条件,我可以只写一个极限条件,也就是小于等于二,而那这怎么写呢?这我可以这么写啊,看着我直接来一个S中号一个零干嘛呢?哎,等等于S中号一个负一,然后我这来一个按啊,来一个按的运算什么意思?它实跟刚才这种写法是一样的,只不过这个呢,相对来说写起来简单一点,但是呢,我们来看一下什么意思吧,这是一个S0等于S一个负一,就是说我要看第一个和最后一个相不相等,我们说了语运算这个块,我们用了一个语运算,语运算是找first对吧?找first如果第一个值是处,它是不是就会执行这个呀?如果第一个值是false,它是不是直接返回就不会执行这个了,所以这是什么意思?如果这两个相等,我就去干嘛呀,我就去递归,如果这两个不等我就干嘛呀,我就不递归了,是不是直接返回fors呀,哎直接返回for,所以这么写也行,但是呢,这种写法呢,哎不建议你这么写,我们还是建议使用这种方式,因为这种方式是不更加。
15:23
清晰啊,哎,这种方式,下面这种方式了解一下就OK了啊,了解一下OK了,好,那这个是我们这个递归的一个两个练习啊,好好的去写一下,哎,当然这个我们用的都是比较简单的递归,往后我们还会涉及到一些比较复杂的,我们现在呢,先做到这儿就OK了啊,就OK了,来我们来停一下。
我来说两句