找到给定数字后的n个斐波那契数字

时间:2014-09-19 00:26:01

标签: algorithm fibonacci

有没有办法从给定的k开始找到n个斐波纳契数? 我知道基本的方法是找到从0开始的所有斐波那契数字,跟踪系列中的数字何时大于k,然后从该点找到n个数字。但有更简单的方法吗?

如果我想在5,000,000之后只找到3个斐波那契数字怎么办?我是否必须从0开始查找系列中的所有数字?

另外,如果解决这个问题的唯一方法是从0开始,那么哪种方法会更好?迭代还是递归的?

感谢。

3 个答案:

答案 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,则介于23之间,因此您正在寻找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的公式。