关于斐波那契解析方法的疑问

问题描述 投票:0回答:1

我正在练习使用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

python fibonacci
1个回答
1
投票
您的代码是精确公式的数字呈现:φ^n - ψ^n;这对您的机械表示的精度极限是正确的,但是随着结果超出该点而失败。
© www.soinside.com 2019 - 2024. All rights reserved.