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

Python实现递推序列第n项遇问题:小n有效大n结果错误求修正

问题分析与代码修正

原代码的核心问题是循环次数计算错误,导致递推的项数和目标n不匹配,同时存在变量未定义的风险(比如n=1/2时),多余的特殊处理也没必要。

错误点拆解

  1. 循环逻辑错位:range(n//2-1)的计算方式无法对应到目标项Uₙ,比如n=5时,循环仅执行1次,最终得到的s是U₃,但实际U₅需要基于U₄和U₃计算,原代码没有覆盖到这一步。
  2. 变量作用域问题:当n≤2时,循环不会执行,s和t未定义,直接打印会触发报错。
  3. 冗余的特殊处理:n=3的结果可以通过正常递推得到,无需单独判断。

修正方案一:基础递推版(逻辑直观,适合小n)

直接从第3项开始,逐项递推到第n项,逻辑清晰不易出错:

n = int(input())
if n == 1 or n == 2:
    print(1)
else:
    u_prev_prev = 1  # U₁
    u_prev = 1        # U₂
    for i in range(3, n+1):
        u_current = u_prev - 2 * u_prev_prev
        # 更新前两项,为下一次循环准备
        u_prev_prev, u_prev = u_prev, u_current
    print(u_prev)

修正方案二:快速幂优化版(适合极大n,时间复杂度O(logn))

如果n非常大(比如1e18),基础递推效率太低,可以用矩阵快速幂优化递推过程:

def matrix_mult(a, b):
    # 计算2x2矩阵乘法
    return [
        [a[0][0]*b[0][0] + a[0][1]*b[1][0], a[0][0]*b[0][1] + a[0][1]*b[1][1]],
        [a[1][0]*b[0][0] + a[1][1]*b[1][0], a[1][0]*b[0][1] + a[1][1]*b[1][1]]
    ]

def matrix_pow(mat, power):
    # 矩阵快速幂
    result = [[1,0], [0,1]]  # 单位矩阵
    while power > 0:
        if power % 2 == 1:
            result = matrix_mult(result, mat)
        mat = matrix_mult(mat, mat)
        power = power // 2
    return result

n = int(input())
if n == 1 or n == 2:
    print(1)
else:
    # 递推关系对应的变换矩阵:[Uᵢ, Uᵢ₋₁] = [Uᵢ₋₁, Uᵢ₋₂] * [[1, 1], [-2, 0]]
    transform_mat = [[1, 1], [-2, 0]]
    mat_powered = matrix_pow(transform_mat, n-2)
    # 初始向量是[U₂, U₁] = [1, 1],相乘后取第一个元素就是Uₙ
    u_n = mat_powered[0][0] * 1 + mat_powered[0][1] * 1
    print(u_n)

内容的提问来源于stack exchange,提问作者Codeer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:35:58