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

如何修复数字三角形最大路径和递归函数的索引越界错误

数字三角形最大路径递归函数索引越界修复

对应数字三角形结构参考:
数字三角形最大路径示例
需求规则:从顶点出发,每个节点可以选择往左下/右下子节点移动,每步选择值更大的子节点累加,求最终路径总和,示例预期结果为30。

报错核心原因

  • 递归终止条件逻辑错误:三角形的层索引范围是0到len(triangle)-1,原代码判断depth == len(triangle)才终止,当depth走到最后一层时,还会进入else分支访问triangle[depth+1],直接访问不存在的层触发索引越界。
  • 节点定位逻辑有隐藏bug:原代码用triangle[depth].index(N)反查当前节点的位置,list.index()只会返回匹配值的第一个索引,当同一层存在重复值时(比如示例中第3层有两个值为4的节点),会出现定位错误,就算不越界结果也会算错。
  • 初始调用逻辑缺失:原代码初始total设为0,从第2层的左节点开始计算,既丢了根节点的值,也完全没遍历右子树的路径,就算不报错结果也不符合预期。

修正后的实现

直接传递当前节点的层、列索引做递归,不需要靠节点值反查位置,从根源避免越界和定位错误:

triangle = [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]]

def min_max(depth, col_idx):
    # 走到最后一层直接返回当前节点值,终止递归
    if depth == len(triangle) - 1:
        return triangle[depth][col_idx]
    # 取当前节点对应的两个子节点
    child_left = triangle[depth+1][col_idx]
    child_right = triangle[depth+1][col_idx+1]
    # 选值更大的子节点路径累加
    return triangle[depth][col_idx] + max(min_max(depth+1, col_idx), min_max(depth+1, col_idx+1))

# 从根节点(第0层第0列)启动递归
answer = min_max(0, 0)
print(answer) # 输出30,和预期结果一致

修复点说明

  • 调整递归终止条件为最后一层直接返回节点值,不会再访问不存在的层索引,彻底解决越界问题。
  • 移除list.index()反查逻辑,直接传递列索引定位节点,避免重复值导致的路径计算错误。
  • 去掉冗余的total传参,递归返回时自动完成值累加,不需要额外维护传入的累加变量,避免初始值设置错误。
  • 从根节点启动递归,自动覆盖所有子路径选择,不需要提前拆分左右子节点单独调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 00:16:12