递归生成自定义三角形代码出错:预期输出与实际不符求助
自定义递归三角形生成程序错误排查
问题说明
需要生成的自定义三角形预期输出:
1 1 1 2 1 2 3 2 2 3 5 3 4 3 5
但当前代码输出的是帕斯卡三角,不符合需求。
错误原因
当前computeTriangle函数的逻辑是帕斯卡三角的生成规则——每行中间元素等于上一行相邻两个元素之和,完全不符合自定义三角形的生成规则。
先拆解自定义三角形的生成规律:
- 第1行:
[1] - 第2行:
[1, 1] - 第3行及以后:
- 首尾元素 = 上一行对应侧的前两个元素之和(首元素=上一行第0+第1个元素,尾元素=上一行倒数第2+倒数第1个元素)
- 中间元素对称分布:
- 对于奇数长度的行,中间元素 = 上一行相邻两个元素之和
- 其他中间元素 = 上一行对应位置的对称元素
修正后的代码
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()
代码说明
- computeTriangle函数:按照自定义规则生成每一行:
- 首尾元素通过上一行相邻两个元素相加得到
- 中间元素根据行长度奇偶性处理,奇数行中间位置取上一行相邻元素和,其余对称位置直接复用上一行的对应元素
- printTriangle函数:使用格式化输出
f"{num:2d}"保证每个元素占2个字符宽度,和预期输出的对齐效果一致。
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

