Fibonacci

Definition

f(0)=0
f(0)=0f(0)=0
f(1)=1
f(1)=1f(1)=1
f(n)=f(n-1)+f(n-2)
f(n)=f(n1)+f(n2)f(n)=f(n-1)+f(n-2)

Recursive

function f(n)
    if n == 0
        return 0
    else if n == 1
        return 1
    else
        return f(n-1)+f(n-2)

Recursive

f(3)
f(3)f(3)
f(2)
f(2)f(2)
f(1)
f(1)f(1)
f(0)
f(0)f(0)
f(1)
f(1)f(1)

Recursive

f(5)
f(5)f(5)
f(2)
f(2)f(2)
f(1)
f(1)f(1)
f(0)
f(0)f(0)
f(1)
f(1)f(1)
f(4)
f(4)f(4)
f(3)
f(3)f(3)
f(2)
f(2)f(2)
f(0)
f(0)f(0)
f(1)
f(1)f(1)
f(2)
f(2)f(2)
f(1)
f(1)f(1)
f(0)
f(0)f(0)
f(1)
f(1)f(1)
f(3)
f(3)f(3)

Recursive

how about f(1000000)???

f(1000000)
f(1000000)f(1000000)
f(999999)
f(999999)f(999999)
f(999998)
f(999998)f(999998)
f(1)
f(1)f(1)
f(0)
f(0)f(0)
f(0)
f(0)f(0)
f(0)
f(0)f(0)
f(0)
f(0)f(0)
f(0)
f(0)f(0)

too slow!!! TLE

Memorize Search

但是這不是今天的重點

把算過的東西記起來

重點

不要重複計算

Iterative

f[0] = 0
f[1] = 1
for i = 2~N
    f[i] = f[i-1] + f[i-2]

Iterative

f(0)
f(0)f(0)
f(1)
f(1)f(1)
f(2)
f(2)f(2)
f(3)
f(3)f(3)
f(4)
f(4)f(4)
f(5)
f(5)f(5)
f(6)
f(6)f(6)
f(7)
f(7)f(7)
f(8)
f(8)f(8)
0
00
1
11
1
11
2
22
3
33
13
1313
8
88
5
55
21
2121

only n-1 times addition for f(n)!! fast

Advance

faster?

yes!! fast exponential

fibonacci

By allenwhale

fibonacci

  • 702