新手入门,写杨辉三角的时候,运行报错数组越界,求大佬解决

思否 问答 已采纳 👍 2 含 AI 优化版

问题

新手入门,写杨辉三角的时候,运行报错数组越界,求大佬解决

在 SegmentFault 查看原问题 →

由大模型辅助整理,保留原意,优化结构与可读性。

问题概述

提问者在实现杨辉三角算法时,运行代码报「数组越界」错误,希望定位并修复这个 bug。

涉及技术

JavaScript、数组、算法(杨辉三角)

期望结果

希望明确报错的具体原因,并得到正确的循环边界写法。

回答

原始回答

第一次循环 i=0,然后执行到 yangHui[i-1] 不就是 yangHui[-1]。数组不支持负数呀。所以你应该 i=1; 然后第0行你自己给个1

AI 优化 · 回答整理

解答思路

报错的根源是循环从 i = 0 开始,导致代码中出现了 yangHui[i - 1],也就是访问 yangHui[-1]——JavaScript 数组不支持负数下标访问,因此触发了越界/取值异常。解决方式是把循环起始值改为 i = 1,并单独给第 0 行赋初始值 1

示例代码

const yangHui = [[1]]; // 第 0 行手动赋值为 1

for (let i = 1; i < n; i++) {
  yangHui[i] = [1]; // 每行第一个元素恒为 1
  for (let j = 1; j < i; j++) {
    yangHui[i][j] = yangHui[i - 1][j - 1] + yangHui[i - 1][j];
  }
  yangHui[i].push(1); // 每行最后一个元素恒为 1
}

详细说明

杨辉三角的递推公式是「当前行某一列的值 = 上一行相邻两列的值之和」,也就是需要访问 yangHui[i - 1] 这一行的数据。如果循环从 i = 0 开始,第一次循环时 i - 1 就是 -1,而 JavaScript 数组不存在「负数下标」的概念(arr[-1] 只会被当作一个普通的对象属性访问,通常得到 undefined,进而在后续运算或访问其属性时产生 NaN 或抛出错误,看起来像「越界」)。

正确的处理方式是:

  1. 第 0 行单独处理:手动赋值为 [1],因为它没有「上一行」可以依赖。
  2. 循环从 i = 1 开始:确保每次访问 yangHui[i - 1] 时,i - 1 至少是 0,一定是数组中已存在的合法行。

这样就避免了对不存在的负数下标进行访问,从根源上解决了越界问题。

小结

杨辉三角这类「依赖上一行/上一个元素」的递推算法,循环起始下标一定要从有「前驱」的位置开始(即 i = 1),并单独初始化没有前驱的第一行/第一个元素,避免出现访问负数下标导致的越界问题。

由大模型辅助整理,保留原意,补充结构与代码格式。

回答转载自 SegmentFault

评论

评论功能即将开放。你也可以通过 邮件GitHub Issue 反馈。