新手入门,写杨辉三角的时候,运行报错数组越界,求大佬解决
问题
新手入门,写杨辉三角的时候,运行报错数组越界,求大佬解决
由大模型辅助整理,保留原意,优化结构与可读性。
问题概述
提问者在实现杨辉三角算法时,运行代码报「数组越界」错误,希望定位并修复这个 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 或抛出错误,看起来像「越界」)。
正确的处理方式是:
- 第 0 行单独处理:手动赋值为
[1],因为它没有「上一行」可以依赖。 - 循环从
i = 1开始:确保每次访问yangHui[i - 1]时,i - 1至少是0,一定是数组中已存在的合法行。
这样就避免了对不存在的负数下标进行访问,从根源上解决了越界问题。
小结
杨辉三角这类「依赖上一行/上一个元素」的递推算法,循环起始下标一定要从有「前驱」的位置开始(即 i = 1),并单独初始化没有前驱的第一行/第一个元素,避免出现访问负数下标导致的越界问题。
由大模型辅助整理,保留原意,补充结构与代码格式。
回答转载自 SegmentFault