使用python查找某个范围内的斐波纳契数

时间:2015-01-24 19:34:20

标签: python-2.7 fibonacci

我正在尝试在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

3 个答案:

答案 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

此函数将计算出的斐波纳契数存储在列表中,然后将它们用作“缓存”数字以进一步计算。

希望它有所帮助!