确定N是否是斐波那契,如果没有找到小于N的最大斐波纳契数

时间:2012-08-09 07:44:59

标签: python math

如何确定给定数字N是否为斐波那契数,如果该数不是斐波那契数,我怎样才能确定最小的斐波纳契数小于N

我通过生成一系列限制为N的斐波纳契数来找到解决方案。

有没有更好的方法在Python中执行此操作?

人们在DOWN VOTES期间考虑,我接受了这里提供的解决方案。我不认为这是值得的,因为我发布了我需要的内容并得到了你们的解决方案。

谢谢。

2 个答案:

答案 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中一样。