You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

帕斯卡三角递归代码详解:n=2时无数组越界的原因

解析Python帕斯卡三角递归代码的运行逻辑

咱们一步步拆解这段递归代码,尤其是你疑惑的n=2时的数组越界问题——其实核心是那个for循环根本没执行,所以完全不会触发越界错误。先整体看代码逻辑,再逐个n值拆解:

代码核心思路

这段代码用递归生成帕斯卡三角的第n行(注意这里n从1开始计数):

  • 递归终止条件:当n=1时,直接返回第一行[1]
  • 递归构建逻辑:对于n>1的情况,先递归获取上一行(第n-1行),然后通过上一行的相邻元素求和,拼接当前行的首尾1,得到当前行。

逐值拆解运行过程

当n=1时

直接触发终止条件,返回[1],这是帕斯卡三角的第一行。

当n=2时

进入else分支,执行以下步骤:

  1. 初始化line = [1]
  2. 调用pascal(1),得到previous_line = [1]
  3. 看for循环的范围:range(len(previous_line)-1) → len(previous_line)是1,减1后是0,range(0)是一个空的迭代范围,所以这个循环根本不会执行!
  4. 执行line += [1],line变成[1,1],返回这个结果。

你之前疑惑的previous_line[i+1]越界问题,因为循环没跑,所以根本不会执行到这行代码,自然不会出错~

当n=3时

再往下走一层帮你更清晰理解:

  1. 初始化line = [1]
  2. 调用pascal(2)得到previous_line = [1,1]
  3. 循环范围是range(len(previous_line)-1) → len([1,1])-1=1,所以range(1)会生成0,循环执行1次:
    • i=0时,计算previous_line[0] + previous_line[1] = 1+1=2,把2追加到line中,此时line是[1,2]
  4. 执行line += [1],line变成[1,2,1],返回结果。

当n=6时

递归会从n=1开始,依次生成n=1到n=5的行,最后基于n=5的行[1,4,6,4,1]构建n=6的行:

  • 循环范围是range(4)(因为len([1,4,6,4,1])-1=4),循环执行4次,分别计算相邻元素和:
    • i=0: 1+4=5 → line变成[1,5]
    • i=1:4+6=10 → line变成[1,5,10]
    • i=2:6+4=10 → line变成[1,5,10,10]
    • i=3:4+1=5 → line变成[1,5,10,10,5]
  • 最后执行line += [1],得到[1,5,10,10,5,1],所以print(pascal(6))会输出这个结果。

关键总结

  • 递归的核心是自底向上构建,从最基础的n=1开始,一步步生成每一行
  • 你疑惑的n=2时的越界问题,本质是循环范围为空,代码根本没执行到访问previous_line[i+1]的步骤
  • 循环的range(len(previous_line)-1)是为了保证i+1不会超出上一行的索引范围:上一行长度是k,索引是0到k-1,i最大是k-2,i+1就是k-1,刚好是最后一个元素的索引,不会越界

内容的提问来源于stack exchange,提问作者user9111001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:51:56