C#实现帕斯卡三角代码出现无限循环及内存溢出问题排查
帕斯卡三角代码的内存溢出问题分析与修复
问题根源
trianglestorage未重置:你在循环中一直复用同一个trianglestorage列表,每次循环都往里面追加元素却从不清空。执行triangle = trianglestorage后,下一次循环操作的triangle就是这个不断膨胀的列表,循环次数会随列表长度指数级增长,最终触发内存溢出。- 初始逻辑冗余:开头输出空列表不符合帕斯卡三角结构(第一行应为
1)。
修复后的代码
static void Main(string[] args) { int numrows = int.Parse(Console.ReadLine()); PascalsTriangle(numrows); } static void PascalsTriangle(int numRows) { List<int> currentRow = new List<int>(); for (int i = 0; i < numRows; i++) { // 为当前行首尾添加1 currentRow.Insert(0, 1); currentRow.Add(1); // 输出当前行 Console.WriteLine(string.Join(", ", currentRow)); // 创建新列表存储下一行的中间元素 List<int> nextRow = new List<int>(); for (int j = 0; j < currentRow.Count - 1; j++) { nextRow.Add(currentRow[j] + currentRow[j + 1]); } // 更新当前行为下一行的中间元素,下一轮循环会补首尾的1 currentRow = nextRow; } }
修复说明
- 每次循环创建全新的
nextRow列表,彻底避免旧列表元素累积的问题。 - 精简初始逻辑,直接从帕斯卡三角的第一行开始构建,去掉不必要的空列表输出。
- 用
currentRow和nextRow明确区分当前行与下一行,逻辑更清晰易懂。
内容的提问来源于stack exchange,提问作者BorZafror
相关产品推荐
相关产品推荐

