为什么我的DO-WHILE循环生成斐波那契数列未按预期运行?
代码异常原因
- 核心死循环问题:你嵌套了
for循环和do-while循环,其中for循环的终止条件永远无法满足。初始化时i=2、ToInfinity=3,每执行一次for循环体,ToInfinity就会加1,i每次循环结束也会自增1,所以i < ToInfinity的判断会永远成立,程序一直卡在for循环内不断往列表加元素,外层do-while的终止判断n3 <= limit完全没有执行机会,直到列表占用内存超出限制抛出错误。 - 逻辑冗余:生成斐波那契序列不需要双层循环,单层循环就可以完成逻辑。
- 计数错误:你已经提前向列表添加了0和1两个初始值,
terms初始值却设为0,最终统计的项数会比实际少2。 - 语法错误:最后输出字符串中占位符写为
{1],右花括号错写成了方括号,运行时会抛出格式异常。 - 输出逻辑错误:直接对
List<int>类型执行Console.WriteLine只会输出类型名称,不会打印序列的具体内容。
修复后可正常运行的代码
int n1 = 0, n2 = 1, n3 = 0, limit; List<int> fibonaccisequence = new List<int>(); Console.Write("Enter the limiting value: "); limit = Convert.ToInt32(Console.ReadLine()); // 处理边界情况,限制值小于0直接返回 if (limit < 0) { Console.WriteLine("Limit value cannot be negative"); return; } fibonaccisequence.Add(n1); if (limit == 0) { Console.WriteLine(string.Join(", ", fibonaccisequence)); Console.WriteLine("There are {0} terms up to {1}.", fibonaccisequence.Count, limit); return; } fibonaccisequence.Add(n2); while (true) { n3 = n1 + n2; if (n3 > limit) { break; } fibonaccisequence.Add(n3); n1 = n2; n2 = n3; } Console.WriteLine(string.Join(", ", fibonaccisequence)); Console.WriteLine("There are {0} terms up to {1}.", fibonaccisequence.Count, limit);
内容的提问来源于stack exchange,提问作者Nobody
相关产品推荐
相关产品推荐

