You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言中slice长度为何扩展至5而非仅返回第5个斐波那契数

解答:为什么该斐波那契函数返回长度为n的slice而非单个值

你之所以得到长度为5的slice,核心原因是这个slice从创建之初长度就是5,根本没有后续扩展的过程,具体拆解如下:

  1. 关键创建逻辑
    函数fbn的第一行代码:

    fbnSlice := make([]uint64, n)
    

    在Go中,make创建slice时第二个参数指定的是slice的长度(length)。当你调用fbn(5)时,这里直接创建了一个长度为5、所有元素初始值为0的uint64类型slice。

  2. 填充每个位置的斐波那契值

    • 代码先手动给索引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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:25:23