如何查找给定Fibonacci数的索引

时间:2015-08-20 19:21:14

标签: python c++ math fibonacci

我尝试使用以下公式

formula

在编程问题中找到斐波纳契数(text)的索引,并且所有较小的测试用例都已通过,但有些情况下F接近10 ^ 18失败。我做了一些干运行,发现如果F = 99194853094755497(第82个Fibonacci数),根据上面公式的n的值是81.我用Python和C ++编写了这个,可以找到here和{{分别是3}。我想知道该公式是否适用于F的每个值或是否有一些限制?

注意:在做了一些测试之后,我发现代码正在给出正确答案,直到第52个斐波纳契数。

更新:问题有测试用例,这就是我使用for循环的原因。给定的数字F可能不一定是斐波纳契数。例如,如果F = 6,那么它位于两个斐波那契数字5和8之间。现在,斐波那契数列中的“5”指数是4,所以答案是4。

3 个答案:

答案 0 :(得分:1)

该公式运作得很好:

import math
n = 99194853094755497
print math.log(n * math.sqrt(5) + 0.5) / math.log(1.61803398875) - 1

输出:

82.0

对您的代码的评论:

  • 如果浮点结果非常接近int(...),则使用82.0四舍五入为整数可能会导致问题。数值问题可能会导致它略大,即使数学上它会更小。

答案 1 :(得分:-1)

我认为你的公式导致堆栈溢出,因为数字太大而无法容纳int。

答案 2 :(得分:-2)

F = 99194853094755497是84斐波那契数,因此它的索引是83.使用下面的脚本来获得正确的索引(整数而不是浮点数)。

eps = 10**-10
phi = (1+math.sqrt(5))/2  # golden search ratio
fibonacci_index = int(round(math.log(n * math.sqrt(5)+eps)/math.log(phi)))

其他信息,代码 有关实现的更详细文档,请参阅此https://github.com/gvavvari/Python/tree/master/Fibonacci_index