我正在尝试在python中编写一个函数,该函数返回某个范围内所有斐波那契数字的列表但是我的代码不能正常工作它只返回[0]。有什么问题?
from math import sqrt
def F(n):
return int(((1+sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5)))
def Frange(x):
A = [0]
while max(A) < x:
H = 1
for i in range(H):
A.append(F(i))
H = H+1
return A
答案 0 :(得分:1)
您将H = 1
设置为while
循环中的第一个语句;因此,每当您输入for
循环时,H = 1
并且您只会获得n=0
您需要在H = 1
循环之外设置while
:
def Frange(x):
A = [0]
H = 1
while max(A) < x:
for i in range(H):
A.append(F(i))
H = H+1
return A
您可以通过在循环中打印各种值来轻松解决这个问题,例如print H
。
答案 1 :(得分:0)
我发现了另一个错误,改进的代码是:
from math import sqrt
def F(n):
return int(((1+sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5)))
def Frange2(x):
A = [0]
H = 1
while max(A) < x:
if F(H) < x:
A.append(F(H))
else:
break
H = H+1
return A
答案 2 :(得分:0)
计算范围内斐波那契数列表的最快,最流行且最简单的解决方案是
def fib3(n): #FASTEST YET
fibs= [0,1] #list from bottom up
for i in range(2, n+1):
fibs.append(fibs[-1]+fibs[-2])
return fibs
此函数将计算出的斐波纳契数存储在列表中,然后将它们用作“缓存”数字以进一步计算。
希望它有所帮助!