有一个固定的数学公式= =,不知道的话显然没法应用

首先黄金分割率接近于这个公式,

数学算法(一):快速求斐波那契数第n项通过黄金分割率公式-LMLPHP

(以下为黄金分割率与斐波那契的关系,可跳过)

通过斐波那契数列公式

数学算法(一):快速求斐波那契数第n项通过黄金分割率公式-LMLPHP

两边同时除以

数学算法(一):快速求斐波那契数第n项通过黄金分割率公式-LMLPHP

得:

数学算法(一):快速求斐波那契数第n项通过黄金分割率公式-LMLPHP(1)

注意后一项比前一项接近于黄金分割率

数学算法(一):快速求斐波那契数第n项通过黄金分割率公式-LMLPHP(2)

那么前一项比后一项则为1/黄金分割率(备注:其实有这么一个规律0.618/1=1/1.618=1.618/2.618=0.618)

数学算法(一):快速求斐波那契数第n项通过黄金分割率公式-LMLPHP(3)

那么(2)(3)带入(1)可得

数学算法(一):快速求斐波那契数第n项通过黄金分割率公式-LMLPHP

数学算法(一):快速求斐波那契数第n项通过黄金分割率公式-LMLPHP

可以求得黄金分割率的根为

数学算法(一):快速求斐波那契数第n项通过黄金分割率公式-LMLPHP

对于广义的斐波那契数列:数学算法(一):快速求斐波那契数第n项通过黄金分割率公式-LMLPHP

一般项可以表示为:数学算法(一):快速求斐波那契数第n项通过黄金分割率公式-LMLPHP

因此:

数学算法(一):快速求斐波那契数第n项通过黄金分割率公式-LMLPHP

当 数学算法(一):快速求斐波那契数第n项通过黄金分割率公式-LMLPHP

这个函数趋向于

数学算法(一):快速求斐波那契数第n项通过黄金分割率公式-LMLPHP

开始代码

a(n)为斐波那契数第n项,Binet 公式(推导过程见下最下方)

数学算法(一):快速求斐波那契数第n项通过黄金分割率公式-LMLPHP

O(1)复杂度

Python

def fib(self, N):
  golden_ratio = (1 + 5 ** 0.5) / 2
  return int((golden_ratio ** N + 1) / 5 ** 0.5)

参考:

斐波那契数列与黄金分割率的关系:https://demonstrations.wolfram.com/GeneralizedFibonacciSequenceAndTheGoldenRatio/

Binet公式推导:https://www.sohu.com/a/284819172_614593

05-11 09:42