【发布时间】:2021-08-05 07:28:48
【问题描述】:
这是返回两个连续数的斐波那契数列的代码,其乘积在fib() 函数中传递。如果产品超过给定的数字,代码将返回这两个数字和list 中的False,如图所示。
这需要大量时间来运行更大的数字。 有人可以帮我优化这段代码吗?
def fib(n):
if n<=1:
return n
else:
return fib(n-1) + fib(n-2)
def productFib(prod):
i = 0
while i >= 0:
a = fib(i)*fib(i+1)
if a == prod:
return [fib(i), fib(i+1), True]
elif a > prod:
return [fib(i), fib(i+1), False]
i+=1
print(productFib(41)) # [8, 13, False]
print(productFib(40)) # [5, 8, True]
print(productFib(4895)) # [55, 89, True]
print(productFib(5895)) # [89, 144, False]
斐波那契数列:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, ... .
【问题讨论】:
-
您每次调用
fib(i)和fib(i+1)三次而不是一次并存储结果。您可以提高fib函数的效率,但您还需要优化调用方式。
标签: python python-3.x fibonacci