使用数组和 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 循环的斐波那契数列的主要内容,如果未能解决你的问题,请参考以下文章