使用数组和 For 循环的斐波那契数列

Posted

技术标签:

【中文标题】使用数组和 For 循环的斐波那契数列【英文标题】:Fibonnacci sequence using Arrays and For Loops 【发布时间】:2020-11-01 11:11:15 【问题描述】:

这个程序是用 C# 和斐波那契数列和数组创建一个波状结构。序列的编号位于末尾,星号等于当前行前面的编号。这一切都是使用 For 循环完成的,并且上限由数组完成,我通过使用数组的 .Length 方面解决了限制器问题,但我不了解如何在此序列中正确使用数组的概念。

代码的第一部分我使用具有 12 个索引的数组构建了序列,因为我只需要 11 个第一个斐波那契序列。 我遇到的问题在代码的第二部分。

 class Program
    
        static void Main(string[] args)
        
            int a = 0, b = 1;

            int[] fibArray = new int[12];
            fibArray[0] = 0;
            fibArray[1] = 1;

            Console.WriteLine("0");
            Console.WriteLine("*1");

            for (int i = 3; i <= fibArray.Length; i++)
            

                
                fibArray[i] = a + b;
                a = b;
                b = fibArray[i];
                             

                for(int y = 1; y <= fibArray[i]; y++)
                
                    Console.Write("*");
                

                
                Console.Write("" + fibArray[i]);
                Console.WriteLine();
            

使用第二部分代码,我无法让它注册和输出序列。大多数情况下,我不确定如何正确设置我的数组以确保斐波那契数列也能够反转。我知道这个序列通常是 f(n)=f(n-1)+f(n-2),我无法理解如何在这种情况下正确使用数组。


            for (int p = fibArray[11]; p >= fibArray.Length; p--)
            

                for (int k = 1; k <= p; k++)
                
                    Console.Write("*");  
                
                Console.Write(""+ b);
                Console.WriteLine();                                           
            
        
    



抱歉,我只是想将代码作为一个整体来解释,但要给出我所要问的内容的总和。 这将是如何使用数组,我在当前代码中做错了什么,以及我可以使用哪些方面来控制使用数组本身的循环。

要给出所需输出的整体示例,如下所示:

0
*1
*1
**2
***3
***3
**2
*1
*1
0

【问题讨论】:

您的第二个循环应该从11 开始,而不是fibArray[11] 并下降到0,并且您的打印应该是fibArray[p] 而不是b 【参考方案1】:

关于您的原始代码的一些注意事项。您在元素 0 和 1 处手动设置序列中的前两个值,但随后跳过元素 2 并从元素 3 开始。您的循环将数组的长度包括为有效索引,而它应该从 (array length - 1 ) 因为数组在 .Net 中为零。

您可以使用此string constructor 输出正确的星号长度。

我会将序列的生成与输出分开:

static void Main(string[] args)

    // building the Fibonacci sequence (no output at this time)
    int[] fibArray = new int[12];
    for (int i = 0; i < fibArray.Length; i++)
    
        switch (i)
        
            case 0:
                fibArray[i] = 0;
                break;

            case 1:
                fibArray[i] = 1;
                break;

            default:
                fibArray[i] = fibArray[i - 1] + fibArray[i - 2];
                break;
        
        
    

    // increasing curve
    for (int i = 0; i < fibArray.Length; i++)
    
        Console.WriteLine(new String('*', fibArray[i]) + fibArray[i].ToString());
    
    // decreasing curve
    for (int i = (fibArray.Length-1); i >= 0; i--)
    
        Console.WriteLine(new String('*', fibArray[i]) + fibArray[i].ToString());
    

    Console.WriteLine();
    Console.Write("Press Enter to Quit");
    Console.ReadLine();

输出:

0
*1
*1
**2
***3
*****5
********8
*************13
*********************21
**********************************34
*******************************************************55
*****************************************************************************************89
*****************************************************************************************89
*******************************************************55
**********************************34
*********************21
*************13
********8
*****5
***3
**2
*1
*1
0

Press Enter to Quit

【讨论】:

非常感谢这个使用开关的代码示例。帮助我了解您可以为多个区域标记整数 i。在我自己的知识范围内有点疏忽,但有助于弥补差距并理解您也可以从数组中的 .Length 中减去!再次感谢大家的帮助! 很高兴它有帮助。一定要在某个时候投票或接受。 ;)

以上是关于使用数组和 For 循环的斐波那契数列的主要内容,如果未能解决你的问题,请参考以下文章

递归优化的斐波那契数列

Go斐波那契数列

斐波那契数列

P1-2017级算法第一次上机 A 水水的斐波那契数列

[快速幂][UVa11582]巨大的斐波那契数列!

斐波那契数列