找到第一个百万以上的斐波那契数

时间:2019-02-02 15:03:31

标签: python python-3.x fibonacci

目前正在上一门编程课程,并被分配去查找第一个百万以上的斐波那契数,而我在查找特定数字时遇到了一些麻烦。我还应该在第n个数字达到100万时找到它的索引。我对编码还很陌生,但这是到目前为止我要提出的内容,只是很难弄清楚如何实际计算数字是多少。

我想您可能会使用while循环切换for-for,但是还没有弄清楚如何使所有功能正常工作。

预先感谢:)

def fib_seq(n):
    if n <= 2:
       return 1
    return fib_seq(n-1) + fib_seq(n-2)


lst = []
for i in range(1, 20):
    lst.append(i)
    print(fib_seq(i), lst)

2 个答案:

答案 0 :(得分:2)

一些要点:

  • 您不需要建立列表。仅要求您返回索引和相应的斐波那契编号。

  • Fibonnacci的递归算法不是最佳实践,除非您使用一些备忘录。否则,必须一遍又一遍地重新计算相同的数字。请改用迭代方法。

这是看起来如何:

def fib(atleast):
    a = 0
    b = 1
    i = 1
    while b < atleast:
        a, b = b, a+b
        i += 1
    return i, b


print(fib(1000000)) # (31, 1346269) 

答案 1 :(得分:0)

如果您需要对递归进行一些查找,则应尽量避免在每次迭代中两次调用递归。这是一个典型的例子,其中复杂性爆炸。一种方法是记忆已计算的结果。另一种方法是用函数的参数保持状态。例如,这将提供答案并仅调用该函数32次:

def findIndex(v, prev = 0, current = 1, index = 0):
    if v < prev:
        return (prev, index)
    return findIndex(v, current, prev+current, index + 1 )


findIndex(1000000)  # (1346269, 31)