Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 直接计算第n个Fibonacci项,而不使用binet'查找以前的项;s公式。(在O(1)时间内)_Python_Algorithm_Fibonacci_Fibonacci Heap - Fatal编程技术网

Python 直接计算第n个Fibonacci项,而不使用binet'查找以前的项;s公式。(在O(1)时间内)

Python 直接计算第n个Fibonacci项,而不使用binet'查找以前的项;s公式。(在O(1)时间内),python,algorithm,fibonacci,fibonacci-heap,Python,Algorithm,Fibonacci,Fibonacci Heap,上述代码不正确,它给出了一些更接近fib_n的值 from math import sqrt n = int(input()) phi = (1 + sqrt(5))/2 fib_n = round((phi**n)) print(fib_n) 这段代码在第6行除以sqrt(5)后工作得非常完美 我的疑问是: 除以sqrt(5)的意义是什么?为什么只有sqrt(5)而没有任何其他数字 我可以用地板或天花板(或任何其他)来解决同样的问题,而不需要除以根(5)吗 非常感谢您提供的任何帮助/指

上述代码不正确,它给出了一些更接近fib_n的值

from math import sqrt

n = int(input())
phi = (1 + sqrt(5))/2

fib_n = round((phi**n))

print(fib_n)
这段代码在第6行除以sqrt(5)后工作得非常完美

我的疑问是:

  • 除以sqrt(5)的意义是什么?为什么只有sqrt(5)而没有任何其他数字
  • 我可以用地板或天花板(或任何其他)来解决同样的问题,而不需要除以根(5)吗
  • 非常感谢您提供的任何帮助/指导/资源

    这是错误的公式。 公式应为:

    from math import sqrt
    
    n = int(input())
    phi = (1 + sqrt(5))/2
    
    fib_n = round((phi**n)/sqrt(5))
    
    print(fib_n)
    
    sqrt(5)来自证明: 基本上,sqrt(5)来自解部分分数


    旁注:pow(φ,n)通常比φ**n更有效,它还可以计算MOD。功率(φ,n,m)给出(φ**n)%m

    +1您给出的是正确的数学公式。但是,请注意,当n变大时,pow(phi2,n)非常接近于0,因此,对于较大的n,使用round(pow(phi1,n))/sqrt(5)近似它也会得到正确的结果。对于较小的n,这恰好也给出了正确的结果,所以在实践中,这是可以使用的。看。既然OP提到了比奈公式,取整版本就是OP想要的。@justhalf@mattyx17
    (phi**n)/sqrt(5)
    总是给出正确的答案吗?因为它显示n>=71的偏差。@hack3r_0m
    (φ**n)/sqrt(5)
    是一个近似值。正确的数学公式是
    (((1+sqrt(5))/2)**n)+((1-sqrt(5))/2)**n))/sqrt(5)
    。正如@justhalf所提到的,((1-sqrt(5))/2)**n变为0,因为n变大,所以在某些情况下被忽略
    round(phi**5)
    为11。它既不是“正确的谎言-1”也不是“正确的谎言+1”。@PaulHankin我编辑过它
    from math import sqrt
    
    n = int(input())
    phi1 = (1 + sqrt(5))/2
    phi2 = (1 - sqrt(5))/2
    
    fib_n = (pow(phi1, n) - pow(phi2, n)) / sqrt(5)
    
    print(fib_n)