Pro*_*ogo 5 python optimization integer-overflow sequence fibonacci
我正在开发一个 python 程序来计算斐波那契数列中的数字。这是我的代码:
import math
def F(n):
return ((1+math.sqrt(5))**n-(1-math.sqrt(5))**n)/(2**n*math.sqrt(5))
def fib(n):
for i in range(n):
print F(i)
Run Code Online (Sandbox Code Playgroud)
我的代码使用这个公式来查找斐波那契数列中的第 N 个数字:
这可以计算斐波那契数列中的许多数字,但我确实遇到了溢出错误。
如何改进此代码并防止溢出错误?
注意:我使用的是 python 2.7。
A.J*_*pal -2
您对“我如何改进此代码...”的陈述有点含糊,所以我将其理解为缩短您的代码:
import math
def fib(j):
for i in [int(((1+math.sqrt(5))**n-(1-math.sqrt(5))**n)/(2**n*math.sqrt(5))) for n in range(j)]: print i
Run Code Online (Sandbox Code Playgroud)
您可以将两个函数组合起来形成一个函数,并使用列表理解,您可以使该函数在一行中运行。
如果您正在处理非常大的数字,则无法防止溢出错误,而是尝试捕获它们然后中断:
import math
def fib(j):
try:
for i in [int(((1+math.sqrt(5))**n-(1-math.sqrt(5))**n)/(2**n*math.sqrt(5))) for n in range(j)]: print i
except Exception as e:
print 'There was an error, your number was too large!'
Run Code Online (Sandbox Code Playgroud)
第二个将首先循环所有内容并确保没有错误,如果没有,它将继续打印它。