打印每项为前三项之和的长度为n的序列及代码问题排查
问题排查与修复
错误根因
- 初始值设置不匹配需求:题目要求序列前三项均为1,原代码仅给
arr[0]赋值为1,arr[1]、arr[2]通过递推逻辑计算得到1、2,从第三项开始就不符合预期,后续所有项的计算自然全部偏移。 - 代码硬编码序列长度为9,无法适配任意长度n的通用需求。
修复方案
方案1:基于原代码的最小修改
只调整初始值和循环起始位置,保留原代码的累加逻辑:
arr = [0 for i in range(9)] # 提前初始化前三项为预期值 arr[0] = 1 arr[1] = 1 arr[2] = 1 # 从第四项(下标3)开始递推计算 for i in range(3,9): j = i-1 count = 0 sum = 0 while (j>=0 and count < 3): sum = sum + arr[j] j = j - 1 count = count + 1 arr[i] = sum for i in range(0,9): print(arr[i], end=' ')
方案2:通用优化实现
支持输入任意长度n,代码更简洁高效:
def generate_tribonacci(n): # 处理边界场景 if n <= 0: return [] elif n == 1: return [1] elif n == 2: return [1, 1] # 初始化前三项 res = [1, 1, 1] # 从第四项开始递推,每一项等于前三项之和 for i in range(3, n): res.append(res[-1] + res[-2] + res[-3]) return res # 测试生成长度为9的序列 print(' '.join(map(str, generate_tribonacci(9))))
验证结果
两种方案输出均为:1 1 1 3 5 9 17 31 57,和预期结果完全一致。
内容的提问来源于stack exchange,提问作者Mandalapu Harish
相关产品推荐
相关产品推荐

