检查输入是否为斐波那契数在Python中

5 投票
4 回答
6454 浏览
提问于 2025-04-17 02:35

我想问一下,怎么才能获取一个斐波那契数列的列表,然后检查用户输入的值是否在这个斐波那契数列里面。

    a , b = 1, 1
while num <= sys.maxint:
    fibo == a , b = b, a+b
    if num == (b +a+b):
        print "It is a Fibonacci number"        
        break
    else:
        print "It is not a Fibonacci number"
        break

谢谢!

4 个回答

1

这可能不是一个非常高效的解决方案——使用闭式公式会更高效(可以参考Sven的回答),但你可以这样做:

def fibs():
    a,b = 0,1
    yield a
    yield b
    while True:
        a,b = b,a+b
        yield b

n = int(raw_input("please, enter a number "))
for fib in fibs():
  if n == fib:
    print "your number is a Fibonacci number!"
    break
  if fib > n:
    print "your number is not a Fibonacci number!"
    break

fibs这个生成器会给你一系列的斐波那契数。你可以遍历这个列表,检查每个数字,看它是否等于用户输入的数字(如果相等,那就完成了),或者它是否大于用户输入的数字(在这种情况下也算完成)。

希望这对你有帮助,至少能让你理解Python的生成器。

5

这是一个用Python写的简洁的一行代码

def is_fibonacci(n):
    return n >= 0 and (n==0 or sqrt( 5*n*n - 4).is_integer() or sqrt( 5*n*n + 4).is_integer())
9

使用一种更高级的斐波那契数测试,你可以这样做:

def is_fibonacci(n):
    phi = 0.5 + 0.5 * math.sqrt(5.0)
    a = phi * n
    return n == 0 or abs(round(a) - a) < 1.0 / n

(这可能是判断一个数字是否是斐波那契数的最有效方法,但很可能不是你作业的预期答案。我只是把这个答案放在这里,供将来参考。)

撰写回答