非递归Pell数列Python实现求助:输出结果与预期不符
修复非递归Pell数列生成函数的输出问题
我看了你的代码,问题出在循环的起始逻辑上——你跳过了Pell数列的前两个初始项(0和1),直接从第三项开始计算并打印,这就导致输入长度4时,输出的是第2到第5项,而不是预期的第0到第3项。
先明确Pell数列的定义:
P₀ = 0,P₁ = 1,Pₙ = 2×Pₙ₋₁ + Pₙ₋₂(n ≥ 2)
你的初始值a=0(对应P₀)、b=1(对应P₁)是对的,但循环一开始就计算c=2*b+a得到P₂,然后直接打印更新后的b(此时已变成P₂),相当于第一次循环就输出了P₂,之后的循环依次输出P₃、P₄、P₅,自然和预期不符。
修正后的代码
这里提供两种简洁的修复方案:
方案1:先打印初始项,再循环生成后续项
def p_sequence(): length = int(input("Sequence length: ")) # 处理边界情况 if length <= 0: print("Please enter a positive integer.") return a, b = 0, 1 # 打印第一个项 print(a, end=" ") if length == 1: print() return # 打印第二个项 print(b, end=" ") # 循环生成剩下的length-2个项 for _ in range(length - 2): c = 2 * b + a a, b = b, c print(b, end=" ") print()
方案2:在循环内根据索引判断输出内容
def p_sequence(): length = int(input("Sequence length: ")) if length <= 0: print("Please enter a positive integer.") return a, b = 0, 1 for i in range(length): if i == 0: print(a, end=" ") elif i == 1: print(b, end=" ") else: c = 2 * b + a a, b = b, c print(b, end=" ") print()
测试验证
当输入长度为4时,两个方案都会输出:0 1 2 5,完全符合你的预期。
核心思路就是:确保前两个初始项被优先输出,后续的项再通过循环迭代生成,这样就能严格对应Pell数列的索引和长度要求啦。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

