【发布时间】:2018-07-28 21:14:29
【问题描述】:
我正在解决一个问题,我必须打印所有斐波那契数,这样:
a <= f <= b
我想以大于或等于 a 的最小斐波那契数开始它们,以使我的程序运行得更快。为此,我需要定义一个变量“n”,以便第 n 个斐波那契数满足上述条件(大于或等于 a 的最小数)。要定义这样的变量,我需要找到满足 fibonacci(n) 一般项方程的最小“n”。
我试图通过创建一个 for 循环来找到它,但它最终就像我从第一个斐波那契数开始检查一样慢。有人对如何有效地定义它有任何想法吗?
附:这是我尝试的代码:
from math import sqrt, log, ceil
def Fibo(n):
if n == 1: return 1
elif n == 2: return 2
return Fibo(n-1) + Fibo(n-2)
while True:
try:
a, b = [int(i) for i in input().split()]
cont = 0
phi = (sqrt(5) + 1) / 2
i = ceil(log(a * sqrt(5), phi))
if Fibo(i-1) >= a: i -= 1
elif Fibo(n) < a: i += 1
while True:
if a <= Fibo(i) <= b: cont += 1
elif Fibo(i) > b:
break
i -= 1
print(cont)
except input() == "0 0":
break
【问题讨论】:
-
当然,您只需要以非慢速方式计算斐波那契数即可。
-
计算第n个斐波那契数有一个固定时间公式:stackoverflow.com/a/19892721/125816
-
所以你想要一个更快的解决方案,但比什么更快?你还没有展示你的尝试。
-
这是 URI 问题 1722。我的程序是 4s 运行的,所以它不符合 1s 的时间限制。这是我的代码:repl.it/@MateusBuarque/URI-1722@MrT
标签: python math optimization