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

实现Tribonacci数时触发System.IndexOutOfRangeException,索引存在仍报错?

解决Tribonacci数计算中的System.IndexOutOfRangeException错误

问题描述

我是编程新手,编写计算Tribonacci数的方法public static void TribonacciNumbs(int n)时,运行触发System.IndexOutOfRangeException错误,明明觉得索引是存在的,却搞不懂报错原因。

错误原因

原代码在循环内错误创建新数组而非扩展已有数组:每次循环都新建固定长度的数组,导致后续赋值时,目标索引超出了当前数组的实际长度范围,最终抛出索引越界异常。

解决方案

改用Array.Resize(ref tribo, i+1)动态扩展数组长度后再赋值,确保数组长度始终能容纳当前要写入的索引。

代码示例

错误代码(触发异常)

public static void TribonacciNumbs(int n)
{
    int[] tribo = new int[3];
    tribo[0] = 0;
    tribo[1] = 1;
    tribo[2] = 1;
    
    for (int i = 3; i <= n; i++)
    {
        // 错误:每次循环新建固定长度数组,未扩展容量
        int[] newTribo = new int[3];
        newTribo[i] = tribo[i-1] + tribo[i-2] + tribo[i-3];
        tribo = newTribo;
    }
}

修正后的代码

public static void TribonacciNumbs(int n)
{
    if (n < 0)
    {
        Console.WriteLine("n不能为负数");
        return;
    }
    
    int[] tribo;
    // 处理基础边界情况
    if (n == 0)
    {
        tribo = new int[1];
        tribo[0] = 0;
    }
    else if (n == 1 || n == 2)
    {
        tribo = new int[n+1];
        tribo[0] = 0;
        tribo[1] = 1;
        if (n >= 2) tribo[2] = 1;
    }
    else
    {
        tribo = new int[3];
        tribo[0] = 0;
        tribo[1] = 1;
        tribo[2] = 1;
        
        for (int i = 3; i <= n; i++)
        {
            // 动态扩展数组长度至i+1,确保索引i可用
            Array.Resize(ref tribo, i + 1);
            tribo[i] = tribo[i-1] + tribo[i-2] + tribo[i-3];
        }
    }
    
    // 输出结果示例
    Console.WriteLine($"前{n+1}个Tribonacci数:");
    foreach (int num in tribo)
    {
        Console.Write(num + " ");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:10:34