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

递归生成自定义三角形代码出错:预期输出与实际不符求助

自定义递归三角形生成程序错误排查

问题说明

需要生成的自定义三角形预期输出:

1
1  1
2  1  2
3  2  2  3
5  3  4  3  5

但当前代码输出的是帕斯卡三角,不符合需求。

错误原因

当前computeTriangle函数的逻辑是帕斯卡三角的生成规则——每行中间元素等于上一行相邻两个元素之和,完全不符合自定义三角形的生成规则。

先拆解自定义三角形的生成规律:

  • 第1行:[1]
  • 第2行:[1, 1]
  • 第3行及以后:
    1. 首尾元素 = 上一行对应侧的前两个元素之和(首元素=上一行第0+第1个元素,尾元素=上一行倒数第2+倒数第1个元素)
    2. 中间元素对称分布:
      • 对于奇数长度的行,中间元素 = 上一行相邻两个元素之和
      • 其他中间元素 = 上一行对应位置的对称元素

修正后的代码

def computeTriangle(levels):
    if levels == 0:
        return []
    elif levels == 1:
        return [[1]]
    elif levels == 2:
        return [[1], [1, 1]]
    else:
        triangle = computeTriangle(levels - 1)
        prev_row = triangle[-1]
        row_length = levels
        row = []
        # 生成首元素
        row.append(prev_row[0] + prev_row[1])
        # 生成中间元素
        for i in range(1, row_length - 1):
            if row_length % 2 == 1 and i == row_length // 2:
                # 奇数行中间位置,取上一行相邻两元素之和
                row.append(prev_row[i-1] + prev_row[i])
            else:
                # 其他位置,取上一行的对称位置元素
                if i < row_length // 2:
                    row.append(prev_row[i-1])
                else:
                    row.append(prev_row[i])
        # 生成尾元素
        row.append(prev_row[-2] + prev_row[-1])
        triangle.append(row)
        return triangle


def printTriangle(triangle, levels):
    if levels == 0:
        return
    printTriangle(triangle, levels - 1)
    # 格式化输出,每个元素占2个字符宽度,保证对齐
    for num in triangle[levels - 1]:
        print(f"{num:2d}", end=' ')
    print()


def main():
    levels = 5
    triangle = computeTriangle(levels)
    printTriangle(triangle, levels)


if __name__ == '__main__':
    main()

代码说明

  1. computeTriangle函数:按照自定义规则生成每一行:
    • 首尾元素通过上一行相邻两个元素相加得到
    • 中间元素根据行长度奇偶性处理,奇数行中间位置取上一行相邻元素和,其余对称位置直接复用上一行的对应元素
  2. printTriangle函数:使用格式化输出f"{num:2d}"保证每个元素占2个字符宽度,和预期输出的对齐效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:03:17