目前正在上一门编程课程,并被分配去查找第一个百万以上的斐波那契数,而我在查找特定数字时遇到了一些麻烦。我还应该在第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)
答案 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)