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

非递归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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:41:13