00:00
现在我们来做一个关于这个切片的课堂练习。那我们看一下这个课堂练习的要求,他说啊,编写一个函数叫菲波拉契,传一个N进去。看到没有,穿一个N进去,要求完成下面的功能,第一个呢,可以接收一个n int类型的一个N能够将斐波纳器的数列放入到切片中,注意啊,它是把这个斐波纳器的数列放入到切片中,那也就是说它需要把每一个非波拉器都放到这个数列里边去,不是求最后那个知道吧,那么提示,这给了一个提示,他说斐波纳器的数列形式是这样子的,第一个元素为一,第二个元素为一,第三个元素为二,实际上就是前面。两个数的和,第四一个元素为三,为什么等于三呢?因为它前面的两个数一个为一,一个为二,加起来就为三,第五一个元素为五,就是二加三,第六一个元素为八,是三加五。好了,既然如此的话呢,那么我们就来完成这个,用切片来做。
01:13
为什么不能用数组啊,因为数组呢,它这个这个值在在定在生命数组的时候,数组的大小就得确定下来是不是,但是切片这个呢,它可以在创make的时候传一个变量进去,进行这个分配空间,所以说这个地方用切片是最合适的了。来吧,我们一起完成这个切片的课堂练习题,来,走一个切片课堂练习。课堂练习。那么这个课堂练习的要求,具体的要求呢?我们也把它放过来。要求还是很明确的,对吧。要求非常的明确,第一个呢,他说可以接收一个N子。第二个将非波拉器放到一个切片里面,数组里面,呃,切非波拉器的数组呢,放到这里面去,那现在呢,我们来一起完成。
02:09
好,我们走一下代码。代码。同样的道理哈,我们还是怎么样呢?我们还是一边写代码,一边给大家分析一下实践的思路,打开我们的这个代码,好,我们来看一下同学们。我们新建一个文件夹。我们新建一个文件夹。带走一个。那么我们就叫斐波拉器斐波浪。好吧,斐波那一个练习。我们新建。一个文件叫面顶购。对不对,没点够好,我们还是推一个呢哈,把前面这一部分拿过来用一下。放到我们刚才写的Fi的一个练习里边。
03:02
哎,放哪儿去了,刚才。在这儿。对吧,诶放这好,我们写一个总函数。对吧,然后我们把要求粘贴复制过来。我们把要求粘贴复制到我们的Vs code里边去。这样便于便于我们的。这个编写。好,这是他具体的要求,那么现在呢,我们就来分析一下这个思路。大家想想这个应该怎么做。第一步。第一步。首先呢,我们需要编写一个函数,这个没什么说的,那就是首先我们要声明一个函数,好,这个函数我们估计就叫斐波纳,好吧,非斐波,那然后呢,他可以接收一个整数。这个没问题,但是呢,他做完了之后,他要把它放在一个数列里边,是不是我们让它返回一个切片是最合适的呀,因此这个地方我们要它返回一个切片,那么返回一个什么样类型的切片呢?大家想一想。
04:04
大家都知道斐波纳气这个数啊,将来会越变越大。所以说我们给他一个能够存放最大值的这种数据类型,那就是U。INT64。是不是这种这种数据类型是能够存放最大数的呀,这是第一个好,第二个呢,就是关键就是这个函数怎么写了。这个函数怎么写?那么在编写。编写这个斐波纳这个函数的时候,咱们需要有一个有一个套路,怎么写呢?我的思路是这样子的啊,就是注意啊,人家的要求是将斐波纳器所有的书列放到七篇中,那就这样子的。就是说进行一个for循环。进行for循环。For循环来存放,存放非波纳器数列。斐波那契数列。就是我一个for循环做完了过后,我把所有的非波拉器放到对应的位置,但是这里面有个特特例,就是零。
05:08
就是零。零这个它对应的斐波拉奇数是一,一一对应的斐拉奇也是一,这两个比较特别,要单独的提出来,好,这就是我的思路,那既然有这个思路,我们就来开始写代码了。来吧。我编写一个函数。就要他。我粘贴复制上去没问题吧。好,首先大家想一想,你将来要把这个菲波拉契数列放到切片里边,那你首先去是不是应该先声明一个切片?是不是应该声明一个切片?声明一个切片。那么这个切片的大小是多少呢?切片大小是不是就是N,因为你传了一个N嘛,那我肯定就有N个斐波拉奇数,是这意思吧,那我就先把它做出来,好,我定义一个数组。
06:03
哦,我这样写啊,斐波拉奇数就斐波斐波那数组,呃,切片S。好,做完了过后我们直接make,没毛病吧,Make的时候我们就让他存放这种数据类型。多大呢?大小是多大呢?是不是就是N。是不是就是N,那注意啊,那你这个零就是那你那你这个地方要注意了,你的下标为零的时候。其实对应的就是第一个数的斐波拉奇数,能理解吧?这点大家一定要把它搞清楚,人家这给了提示的啊。给了提示的知道吧,所以说这个就创建好了,创建好了过后呢,我们知道他说。第下标就是第一个数。和第二个数下边都被呃,都对应菲波拉契速度为一,好这块就可以直接写死。
07:00
就是第一个数,我们知道第一第一个数。和第二个数。第二个数都的菲波拉奇数。斐波那系数是等于一的。唯一。这个没问题吧。如果他这个唯一,我是不是直接往里面写就可以了。第一个。数对应的非波拉器为一。第二个菲波拉契。对应的数也为一。这个没毛病吧,然后其他的呢,就用for循环来循环的往这个数字里面放,那就开始了for I。等于2I小于多少呢?I肯定要小于N呢。对不对,第N个是最后一个,那是不能有的,因为你这个N代表是菲波拉七这个切片的大小。实际上最大的一个下标是N减一,所以说这方是N小于I小于ni加加I加加完了过后怎么放呢?同学们想一想。
08:08
是不是就是你的这一个数。的斐波拉奇数应该等于。它前面的第一个数。对应的非波拉系数加上。在前面的那一个斐波拉奇数。写完了,写完这个就是for循环来存放了,存放完了以后,同学们,我们把这个切片返回去就可以了。是不是就可以了,因为它是引用类型,这返回去的就是咱们函数里边给他计算好的,没问题吧,好写完了过后我们来测试一下。测试一把,看看是否好用。能不能好用呢?我们来试一下吧。好。嗯,我们直接调用它来完成,给他传一个十进去。然后呢,我接收一下,注意接收回来的是不是就是就是一个非布拉切的一个切片呢。
09:06
是不是我就这样写啊?Slash等于没毛病吧?就说我把十传进去,我要求的是十个菲波拉契数。十个非拉技术,然后呢,我把它返回给一个变量接收,当然它也就是切片了,我们输出来看一看。我们数出来看看对不对。输出斐波那切。的切片等于轴输出来,如果说输出来的结果就是一一二三五八十三等等等等,那就说明我们这个代码写正确了,否则我们就来看错在哪里,大家看这个代码有没有问题啊。其实。你再你仔细一看,这个代码是没毛病的,对吧,因为我也返回了,而且零一包括循环去给我们飞波拉器赋值也是没问题的。
10:01
完全符合他的要求,那现在呢,我们来运行一下CD到CHAPTER07。然后CD到我们的一个目录里边去,刚才呢是飞波浪。练习go run main.go跑起来。看结果对不对。好,我们可以来简单的分析一下。第一个非波拉器为一一二三五八十三二一三四五五,完全没问题,正确的。没问题吧,那如果说你想你想再放大一点的,你把这个写成20。好,这样呢,就可以拿到20个菲波拉奇数。对吧,你看肯定是正确的,这块我就不去验证的好吧,好同学们,那关于这一个使用切片来存放我们菲波拉契数列的这个练习题呢,就给大家讲解到这里,大家看有什么问题没有。是不是还是比较简单吧,OK,我学习一下代码加思路。
11:04
我们都把它整理到一起了。代码加思路,好,同学们,我把这一块呢,给同学们放到咱们的笔记里边来。走一个。截取一下,从第一行截取到我们的第26行。是吧?咱接着继续截取,从第26行继续截取。26行。从第27行开始截取好。没问题。写完了,大家看这段代码能不能理解。其实这个地方就是利用了我们这个切片,可以根据一个变量来进行这个分配大小,对吧?呃,这样就很轻松的完成了,这里面的关键点是哪里,同学们看是不是还是这还是这个函数,你要把这个思路捋清楚,才能把这道题完成,如果你自己都不太清楚非波拉器怎么去存放,那你肯定是完成不了的。
12:05
对不对,好,同学们,那关于切片的这个课程练习题呢,就给同学们讲解到这里。
我来说两句