有没有办法从给定的k开始找到n个斐波纳契数? 我知道基本的方法是找到从0开始的所有斐波那契数字,跟踪系列中的数字何时大于k,然后从该点找到n个数字。但有更简单的方法吗?
如果我想在5,000,000之后只找到3个斐波那契数字怎么办?我是否必须从0开始查找系列中的所有数字?
另外,如果解决这个问题的唯一方法是从0开始,那么哪种方法会更好?迭代还是递归的?
感谢。
答案 0 :(得分:2)
使用golden ratio
,您可以计算Nth fibonacci
。
phi = 1.61803...
Xn=(phi^n - (1-phi)^n) / sqrt(5)
n
以0开头。
http://en.wikipedia.org/wiki/Golden_ratio#Relationship_to_Fibonacci_sequence
此公式为您提供与下一个和上一个Fibonacci number
相关的数字的位置。也就是说,如果公式产生natural number
,那么它就是Nth Fibonacci number
。如果产生number with decimals
它属于上一个和下一个natural number
之间。如果该数字为2.7
,则介于2
和3
之间,因此您正在寻找fib(3)
,fib(4)
和fib(5)
或者您可以使用Gessel formula
。
A number is a Fibonacci if and only if
5*n^2+4 is a square number or 5*n^2-4 is a square number
所以你可以从你的`N(在这个例子中是5*10^6
)开始计算,直到你先点击两个Fibonacci
。
答案 1 :(得分:1)
斐波纳契序列以指数方式增长,这意味着您不必在超过500万之前进行很多迭代。事实上,第37个斐波那契数字超过500万。
所以我不会比天真的迭代更进一步,在Python中:
def fib(a0, k):
a, b = 0, 1
while a < a0:
a, b = b, a + b
for _ in xrange(k):
yield a
a, b = b, a + b
print list(fib(5000000, 3))
答案 2 :(得分:0)
你可能想要检查一下 http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibFormula.html
虽然我不认为使用N的大输入是值得的,但这种方法使用了binet的公式。