Go语言中slice长度为何扩展至5而非仅返回第5个斐波那契数
解答:为什么该斐波那契函数返回长度为n的slice而非单个值
你之所以得到长度为5的slice,核心原因是这个slice从创建之初长度就是5,根本没有后续扩展的过程,具体拆解如下:
关键创建逻辑
函数fbn的第一行代码:fbnSlice := make([]uint64, n)在Go中,
make创建slice时第二个参数指定的是slice的长度(length)。当你调用fbn(5)时,这里直接创建了一个长度为5、所有元素初始值为0的uint64类型slice。填充每个位置的斐波那契值
- 代码先手动给索引0和1的位置赋值为1(对应斐波那契数列的前两项)
- 接着通过循环从索引2开始,直到索引4(因为
i < n,n=5时i最大为4),依次计算每个位置的斐波那契值,把初始的0覆盖掉。
整个过程中,slice的长度始终是5,只是把每个位置的元素都填充成了对应顺序的斐波那契数,最后返回的是整个填充完成的slice,而非单个值。
如果你的需求是只返回第n个斐波那契数,完全不需要创建slice,只需要用几个变量迭代计算即可,比如:
func fbn(n int) uint64 { if n <= 2 { return 1 } a, b := uint64(1), uint64(1) for i := 3; i <= n; i++ { a, b = b, a+b } return b }
内容的提问来源于stack exchange,提问作者James Pei
相关产品推荐
相关产品推荐

