检查输入是否为斐波那契数在Python中
我想问一下,怎么才能获取一个斐波那契数列的列表,然后检查用户输入的值是否在这个斐波那契数列里面。
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
(这可能是判断一个数字是否是斐波那契数的最有效方法,但很可能不是你作业的预期答案。我只是把这个答案放在这里,供将来参考。)