如何在c#库中使用数组类型编写斐波那契数列

本文关键字:数列 类型 数组 | 更新日期: 2023-09-27 18:09:25

我正在编写一个包含几种常用数学方法的库,以磨练我的技能。我试图实现斐波那契序列使用数组。下面是库中的代码:

     public static int[] Fibonacci(int numElement)
     {
        int n = numElement - 1;
        int[] a = new int[numElement + 1];
        a[0] = 0;
        a[1] = 1;

        for (int i = 2; i <= n; i++)
        {
            a[i] = a[i - 2] + a[i - 1];
        }
      return a;
    }
}
为了测试它,我使用了一个控制台应用程序,我引用了我的dll:
    static void Main(string[] args)
    {
        int[] b = new int[9];
        b = numberTheory.Fibonacci(9);
        foreach (var item in b)
        {
            Console.WriteLine(item);
        }
    }
}
然而,这是上面代码的输出(9为输入):

0

1

1

0

0

0

0

0

0

任何其他输入都以相同的格式输出。我如何修复我的代码以获得所需的输出?

EDIT:似乎不管return语句的位置(或者它是否存在),循环都不会迭代。

如何在c#库中使用数组类型编写斐波那契数列

您过早返回了错误的类型-正如@konked所指出的那样。然而,他提供的解决方案仍然有一个问题:Fibonacci(9)应该等于34(而不是21)。所以你需要在数组中放置n+1个位置

public int[] Fibonacci(int numElement)
{
     if (numElement < 0)
        throw new ArgumentOutOfRangeException("numElement", numElement, "Fibonnaci number to get must be greater or equal than 0");
        var n = numElement + 1; //you need n+1 positions. The 9th number is in 10th position
        var a = new int[n];
        a[0] = 0;
     if (numElement == 0)
         return a;
    a[1] = 1;
    for (var i = 2; i < n; i++)
        a[i] = a[i - 2] + a[i - 1];
    return a;
}

序列的生成过早终止。修改如下:

public static int[] Fibonacci(int numElement)
{
    int n = numElement - 1;
    int[] a = new int[numElement + 1];
    a[0] = 0;
    a[1] = 1;
    for (int i = 2; i <= n; i++)
    {
        a[i] = a[i - 2] + a[i - 1];
    }
    return a;
}

您的return语句在错误的位置并且返回错误的类型(当前在循环中的元素而不是数组),您还制造了一些不必要的变量,如果您将方法更改为以下内容,它应该工作

public static int[] Fibonacci(int numElement)
{
    int[] a = new int[numElement];
    a[0] = 0;
    a[1] = 1;

    for (int i = 2; i < numElement; i++)
    {
        a[i] = a[i - 2] + a[i - 1];
    }
    return a;
}

您也可以在这里查看工作小提琴:https://dotnetfiddle.net/dWZck8