forked from kelvins/algorithms-and-data-structures
-
Notifications
You must be signed in to change notification settings - Fork 0
/
fibonacci.py
executable file
·49 lines (37 loc) · 1.2 KB
/
fibonacci.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
"""
Implementaço de vários algoritmos Fibonacci
A lib "time" foi utilizada para marcar o tempo de
execução dos algoritmos em segundos
"""
import functools
import time
def fib_iterativa(number):
"""Fibonacci iterativa."""
last = 0
curr = 1
for _ in range(0, number):
last, curr = curr, curr + last
return last
def fib_recursiva(number):
"""Fibonnaci recursiva."""
if number < 2:
return number
return fib_recursiva(number - 1) + fib_recursiva(number - 2)
@functools.lru_cache(maxsize=None)
def fib_recursiva_com_cache(number):
"""Fibonacci recursiva com cache."""
if number < 2:
return number
return fib_recursiva_com_cache(number - 1) + fib_recursiva_com_cache(number - 2)
def run_fibonacci(name, func, number=35):
"""
Roda o algoritmo e mostra o tempo de execução dele
"""
start_time = time.time()
result = func(number)
diff_time = time.time() - start_time
print("Fibonacci", name, ":", result, ":", "%.8f" % diff_time, "segundos")
if __name__ == "__main__":
run_fibonacci("Iterativa", fib_iterativa)
run_fibonacci("Recursiva", fib_recursiva)
run_fibonacci("Recursiva com Cache", fib_recursiva_com_cache)