开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map :切片的课堂练习】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/625/detail/9644
切片的课堂练习
内容介绍
一、练习要求
二、思路分析和代码
三、测试
一、练习要求
说明:编写一个函数 fbn(n int),要求完成
1、可以接收一个 n int
2、能够将斐波那契的数列放到切片中,就是说每一个斐波那契都放到数列中,不是求最后一个。
3、提示斐波那契的数列形式:
arr[0]=1; arr[1]=1; arr[2]=2; arr[3] =3; arr[4]=5; arr[5]=8
规律为当前数值等于前两个数值之和,这里之所以要用切片完成,不用数组是因为数组在声明数组的时候,数组大小就要确定下来,但是切片可以在make的时候传一个变量进去,进行分配空间,所以这里用切片是最合适的。
二、思路分析和代码
首先新建文件夹 fbnexecrise,再新建文件 main.go,定义一个主函数,代码如下:
package main
import (
”
fmt"
)
func main() {
}
下面开始分析思路。
1、首先要声明一个函数 fbn(n int),可以接收整数 int,然后要想把接收的放到数列里面,就只有返回切片是最合适的,因此这里返回一个切片,又因为斐波那契数会越变越大,所以要给他一个能存放最大值的数据类型 uint64。
2、在编写函数 fbn(n int)时,要注意要求是将所有的斐波那契都放到数列中,所以可以进行 for 循环来存放斐波那契数列,就是一个 for 循环后所有的斐波那契都放到数列中,但这里有一个特例0,0对应的斐波那契是1,1对应的斐波那契是1。
开始编写代码,首先要将所有的斐波那契都放到数列中就要声明一个切片,切片大小为 n,因为传入的是 n,那肯定就有n个斐波那契数。所以声明切片为 fbnSlice,然后直接 make,make 时存放数据类型为uint64,大小为n,这里需要注意当下标为0时对应的斐波那契数为1,如 arr[0]=1,创建完成后继续,这里已经知道第一个数和第二个斐波那契数,所以这里可以直接写出这两个固定的斐波那契数,当知道第一个为1,第二个也为1时编写代码为 fbnSlice[0]=1,fbnSlice[1]=1,而其他的就用for循环来存放斐波那契数列。for 循环i初始值为2,i小于 n,因为这里第n个就是最后一个,是不能有的,因为n代表的是斐波那契切片的大小,实际上最大的下标是n-1,所以这里是i<n,再进行i++。
然后现在的 fbnSlice[i] 等于前面两个斐波拉契数 fbnSlice[i-1]加上 fbnSlice [i-2]的和,这就是 for 循环的存放。写完后返回切片 return fbnSlice,因为他是引用类型,所以返回去的就是函数里面已经计算好的。
代码如下:func fbn(n int) ([ ]uint64) {
//声明一个切片,切片大小
n
fbnSlice := make([ ]uint64, n)
//第一个数和第一个数的斐波那契为1
fbnSlice[0] = 1
fbnSlice[1] = 1
//进行for循环来存放斐波那契的数列
for i:=2; i<n; i++{
fbnSlice[i] = fbnSlice[i-1]+ fbnSlice[i-2]
}
return fbnSlice
}
三、测试
调用 fbn()传入参数为10,此时作为接收的是 fbnSlice,相当于把10传进去,要求10个斐波拉契数,然后返回给一个变量接收,这里接收变量为切片。最后再进行输出斐波拉契数,如果输出的数就是[1 1 2 3 5 8 13…],说明代码编写正确,如果不是就有问题。
代码为:
f
unc main(){
fnbSlice := fbn(10)
fmt.Println(" fnbSlice=", fnbSlice)
运行结果:
D:\goproject\src\go_code>cd chapter07>cd fbnexercise
D:\goproject\src\go_code\chapter07\fbnexercise>go run main .go
fnbSlice-[1 1 2 3 5 8 13 21 34 55]
观察结果发现没问题,运行成功。
如果想要更多的斐波拉契数可以把10改为20,此时运行结果仍然没问题,如,
[1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765]
这里就是利用了切片可以根据变量大小来分配大小,关键点是 fbn 函数,只有把思路理清楚才能完成这个例题,如果不清楚斐波拉契怎么去存放是完成不了的。