如何在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 10
0
0
0
0
0
任何其他输入都以相同的格式输出。我如何修复我的代码以获得所需的输出?
EDIT:似乎不管return语句的位置(或者它是否存在),循环都不会迭代。
您过早返回了错误的类型-正如@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