我尝试使用以下公式
在编程问题中找到斐波纳契数()的索引,并且所有较小的测试用例都已通过,但有些情况下F接近10 ^ 18失败。我做了一些干运行,发现如果F = 99194853094755497(第82个Fibonacci数),根据上面公式的n的值是81.我用Python和C ++编写了这个,可以找到here和{{分别是3}。我想知道该公式是否适用于F的每个值或是否有一些限制?
注意:在做了一些测试之后,我发现代码正在给出正确答案,直到第52个斐波纳契数。
更新:问题有测试用例,这就是我使用for循环的原因。给定的数字F可能不一定是斐波纳契数。例如,如果F = 6,那么它位于两个斐波那契数字5和8之间。现在,斐波那契数列中的“5”指数是4,所以答案是4。
答案 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