编写生成Padovan序列的Python函数Pad(n)遇问题求助
解决Padovan序列生成函数的问题
我来帮你搞定这个Padovan序列的问题~你的代码问题其实很明确:pad函数里只调用了一次ith(n)拿到序列的最后一个值,然后循环n次把这个值重复添加到列表里,自然输出全是同一个数啦。咱们一步步来修正:
问题分析
先看你的ith(n)函数,它确实能正确计算第n个Padovan数(比如ith(5)返回3,ith(6)返回4),但pad(n)需要的是从P(0)到P(n-1)的完整序列,而不是只拿最后一个数重复。
解决方案1:基于现有ith函数修改(简单但效率一般)
既然ith(i)能返回第i个Padovan数,那我们只需要在pad函数里循环调用ith(i),把每个i从0到n-1的结果依次加入列表就行:
def ith(n): first, sec, third, fourth = 1, 1, 1, 1 for i in range(3, n+1): fourth = first + sec first = sec sec = third third = fourth return fourth def pad(n): lst = [] for i in range(n): lst.append(ith(i)) # 逐个获取P(0)到P(n-1) return lst # 测试调用 print(pad(6)) # 输出 [1, 1, 1, 2, 2, 3]
不过这种方法有个小缺点:每次调用ith(i)都会重新从头计算一遍前面的数,当n很大时效率会比较低。
解决方案2:直接迭代生成序列(高效推荐)
我们可以直接在pad函数里一次生成完整序列,避免重复计算,代码更简洁高效:
def pad(n): if n == 0: return [] # 初始化前三个元素:P(0), P(1), P(2) sequence = [1, 1, 1] # 如果n小于等于3,直接返回前n个元素 if n <= 3: return sequence[:n] # 从第4个元素(对应P(3))开始生成到第n个元素(对应P(n-1)) for i in range(3, n): # 递推公式:P(i) = P(i-2) + P(i-3) next_val = sequence[i-2] + sequence[i-3] sequence.append(next_val) return sequence # 测试调用 print(pad(6)) # 输出 [1, 1, 1, 2, 2, 3]
这个版本只需要一次循环就能生成整个序列,效率高很多,而且逻辑更清晰,还处理了n=0、n<=3的边界情况。
内容的提问来源于stack exchange,提问作者xorcist
相关产品推荐
相关产品推荐

