我正在练习使用Binet公式来计算斐波那契数,通过遵循Binet公式,我想到了以下代码,并在leetcode中通过了测试用例:
class Solution(object):
def fib(self, N):
goldenratio = (1 + 5 ** 0.5) / 2
ratio2 = (1 - 5 ** 0.5) / 2
return int((goldenratio**N-ratio2**N)/(5**0.5))
但是我不明白leetcode提供的解决方案(当然会给出正确的结果):
class Solution:
def fib(self, N):
golden_ratio = (1 + 5 ** 0.5) / 2
return int((golden_ratio ** N + 1) / 5 ** 0.5)
我对leetcode解决方案的问题是:为什么它们在“ golden_ratio ** N”之后加1?根据Binet公式,我认为我的代码是正确的,但是我想知道为什么leetcode使用另一种方法却仍然获得正确的结果。
这里是Binet公式的链接:https://artofproblemsolving.com/wiki/index.php/Binet%27s_Formula
φ^n - ψ^n
;这对您的机械表示的精度极限是正确的,但是随着结果超出该点而失败。