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

Python递归斐波那契数判断函数输出异常,求问题排查

判断斐波那契数的递归函数修正

你的代码存在三个核心问题:

  • 代码不可达:函数前半部分的return语句直接终止了函数,后面的判断逻辑永远不会执行。
  • 逻辑偏离需求:当前函数返回的是2n-3(n>1时),完全不是判断是否为斐波那契数的逻辑。
  • 递归方向错误:你写的逻辑没有围绕“生成斐波那契数并对比目标值”展开。

修正后的递归实现

我们可以写一个辅助递归函数,生成斐波那契数列直到数值超过目标n,同时对比是否匹配:

def isFib(n):
    # 辅助递归函数,生成斐波那契数并检查是否等于n
    def fib_check(a, b):
        if b == n:
            return True
        if b > n:
            return False
        return fib_check(b, a + b)
    
    # 处理边界情况:0和1都是斐波那契数
    if n < 0:
        return False
    return fib_check(0, 1)

测试代码验证

现在用你的测试语句验证:

print(all([isFib(i) for i in [1,2,3,5,8,13,21,34,55]]))  # 输出True
print(all([not isFib(2*i) for i in [1,2,3,5,8,13,21,34,55]]))  # 输出True

补充说明

如果不想用辅助函数,也可以利用数学性质实现(非递归,但更高效):一个数n是斐波那契数当且仅当5*n² +4或5*n² -4是完全平方数,代码如下:

import math

def isFib(n):
    if n < 0:
        return False
    # 计算两个候选值
    x1 = 5 * n * n + 4
    x2 = 5 * n * n - 4
    # 判断是否为完全平方数
    sqrt1 = math.isqrt(x1)
    sqrt2 = math.isqrt(x2)
    return sqrt1 * sqrt1 == x1 or sqrt2 * sqrt2 == x2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:02:01