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
相关产品推荐
相关产品推荐

