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

我的斐波那契算法代码报Index out of range错误,求原因解析

斐波那契Swift代码“Index out of range”错误分析与解决

错误原因

你的代码核心问题出在数组下标赋值的逻辑上:

  • 初始化fibArray后,通过insert操作得到数组[0, 1],此时数组仅有2个元素,有效索引为0和1。
  • 当循环从2开始到目标值n(比如n=8)时,执行fibArray[i] = ...的操作,此时i=2对应的索引在当前数组中并不存在。Swift数组不允许直接通过下标给未初始化的位置赋值,必须确保索引已存在,否则就会抛出“Index out of range”错误。

解决方法

有两种简单的修正方案,都能解决数组越界问题:

方案1:使用append添加元素

直接在数组末尾追加计算好的斐波那契数,append会自动扩展数组容量,无需担心索引问题:

func fib(n: Int) -> Int {
    guard n >= 0 else { fatalError("n必须是非负整数") }
    if n == 0 { return 0 }
    if n == 1 { return 1 }
    var fibArray = [0, 1]
    for i in 2...n {
        fibArray.append(fibArray[i-1] + fibArray[i-2])
    }
    return fibArray[n]
}
var a = fib(n: 8)
print(a) // 输出21

方案2:预分配数组空间

提前创建一个长度为n+1的数组,确保所有需要的索引都已存在,之后直接通过下标赋值:

func fib(n: Int) -> Int {
    guard n >= 0 else { fatalError("n必须是非负整数") }
    var fibArray = Array(repeating: 0, count: n+1)
    if n >= 1 {
        fibArray[1] = 1
    }
    for i in 2...n {
        fibArray[i] = fibArray[i-1] + fibArray[i-2]
    }
    return fibArray[n]
}
var a = fib(n: 8)
print(a) // 输出21

两种方案都加入了对n为负数的判断,避免非法输入导致的额外问题。

内容的提问来源于stack exchange,提问作者maytime

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:56:02