如何确定给定数字N
是否为斐波那契数,如果该数不是斐波那契数,我怎样才能确定最小的斐波纳契数小于N
?
我通过生成一系列限制为N
的斐波纳契数来找到解决方案。
有没有更好的方法在Python中执行此操作?
人们在DOWN VOTES期间考虑,我接受了这里提供的解决方案。我不认为这是值得的,因为我发布了我需要的内容并得到了你们的解决方案。谢谢。
答案 0 :(得分:3)
对于某个整数N
是否为Fibonacci数的简单测试如下:
N is a Fibonacci number iff either (5 * n^2 + 4) or (5 * n^2 - 4) is a square number.
请参阅此处获取巧妙的证据(第417页):http://www.fq.math.ca/Scanned/10-4/advanced10-4.pdf
如果事实证明N
不是Fibonacci数,那么最简单的方法就是继续尝试使用较小的数字,直到找到一个,尽管这可能需要很长时间才能找到N
}。
答案 1 :(得分:1)
这是一个通用算法: 天真的方法是通过递归解决它 - 但就运行时复杂性而言,它根本没用。 创建一个新数组,我们称之为FibArr。 将1,1插入数组。 然后,阵列中第i个索引的值是fibArr [i-1] + fibArr [i-2](i> = 3) 在每次迭代中检查新值是否插入到fibArr == N中。 如果是,请返回。 否则,检查插入的值是否大于N. 如果为true,假设现在fibArr具有k值,则返回(k-1)值。 否则,继续迭代:)
*使用python它更容易 - 但请注意,在python中没有数组,但列表。 使用python更容易,因为你不必设置列表长度,就像在java中一样。