, n , . :
function fib(n)
if n <= 2 return 1
return fib(n-1) + fib(n-2)
, O (2 n), . O (n), 1 n n 1 :
function fib(n) # linear
if n <= 2 return 1
prev2 = prev1 = 1
k := 3
while k <= n
fib := prev2 + prev1
prev2 := prev1
prev1 := fib
return fib
, , , , .
Dijkstra n , O (log n), , ; Dijkstra , ( , F 0= 1 F 0= 0, ). :
function fib(n)
if n <= 2 return 1
n2 := n // 2
if n % 2 == 1 return square(fib(n2+1)) + square(fib(n2))
return fib(n2) * (2*fib(n2-1) + fib(n2))
, O (1), , :
function fib(n) # constant
sqrt5 := sqrt(5)
p := (1 + sqrt5) / 2
q := 1 / p
return floor((p**n + q**n) / sqrt5 + 0.5)
, - , , , , - , , , n .