首页 > 解决方案 > 如何在 C# 中返回数组斐波那契数?

问题描述

我想创建一个函数,它将整数数组作为输入,并将 int 数组打印为斐波那契数列,例如:第三个元素 = 第二个元素 + 第一个元素。

到目前为止,这是我的代码:

static void  Result(int[] arr)
{    
    for (int i = 0; i < arr.Length; i++)
    {
        if (arr[i] < 0)
            Console.WriteLine("arr[i]", arr[i], "  number to get must be greater or equal than 0");

        var n = arr[i] + 1; 
        var a = new int[n];
        arr[0] = 0;

        if (arr[i] == 0)
        {
            a[1] = 1;
        }
        for ( i = 2; i < n; i++)
        {
            a[i] = a[i - 2] + a[i - 1];
        }                
    }
}

public static void Main()
{
    int[] arr = {7, 8, 3, 9, 11,16,14,91, }; 
    Result(arr);
}

标签: c#

解决方案


如果输入是: 1 ,3 ,4 ,6, 7 ,8 10, 11, 15 ,25 输出应该是: 1, 3, 4, 7, 11 所以 1+3=4, 4+3=7 等等.

我看了你的代码,你很接近。

最大的问题是,i = 0如果您尝试访问arr[-1]arr[-2].

我们可以从 开始解决这个问题i = 2

例如:

static int[] Result(int[] arr)
{    
    int[] result = arr;

    for (int i = 2; i < arr.Length; i++)
    {
        result[i] = result[i-1] + result[i-2];
    }

    return result;
}

int[] arr = { 1 ,3 ,4 ,6, 7 ,8, 10, 11, 15 ,25 };

arr = Result(arr);

Console.WriteLine(string.Join(", ",arr));
// outputs: 1, 3, 4, 7, 11, 18, 29, 47, 76, 123

另一个注意事项是,除非你将'int[] arr作为引用传递,否则你需要返回一个 newint[]作为结果,因为Result()' 的更改arr不会反映在数组上。


推荐阅读