commit
5d8dca56e3
@ -0,0 +1,58 @@
|
|||||||
|
Fibonacci
|
||||||
|
==
|
||||||
|
|
||||||
|
The simple recursion:
|
||||||
|
|
||||||
|
```
|
||||||
|
fib(0) = 0
|
||||||
|
fib(1) = 1
|
||||||
|
fib(n) = fib(n - 1) + fib(n - 2)
|
||||||
|
```
|
||||||
|
|
||||||
|
e.g.:
|
||||||
|
```
|
||||||
|
fib(4) = [fib(3)] + [fib(2)] = [fib(2) + fib(1)] + [fib(1) + fib(0)] = [(fib(1) + fib(0)) + 1] + [1 + 0] = 3
|
||||||
|
```
|
||||||
|
|
||||||
|
With this approach we have to repeat a lot of calculations.
|
||||||
|
|
||||||
|
With dynamic programming techniques we only calculate each value one time.
|
||||||
|
|
||||||
|
|
||||||
|
Execution use cases
|
||||||
|
==
|
||||||
|
|
||||||
|
```
|
||||||
|
Calculating Fibonacci of 10 recursively took 2.508100033082883e-05 seconds.
|
||||||
|
Calculating Fibonacci of 10 with dynamic programming took 7.996000022103544e-06 seconds.
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
Calculating Fibonacci of 20 recursively took 0.0030608279998887156 seconds.
|
||||||
|
Calculating Fibonacci of 20 with dynamic programming took 2.0420000055310084e-05 seconds.
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
Calculating Fibonacci of 30 recursively took 0.2475134070000422 seconds.
|
||||||
|
Calculating Fibonacci of 30 with dynamic programming took 1.4527999610436382e-05 seconds.
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
Calculating Fibonacci of 35 recursively took 2.728477938999731 seconds.
|
||||||
|
Calculating Fibonacci of 35 with dynamic programming took 1.7669000044406857e-05 seconds.
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
Calculating Fibonacci of 38 recursively took 11.392906241000219 seconds.
|
||||||
|
Calculating Fibonacci of 38 with dynamic programming took 1.8928999907075195e-05 seconds.
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
Calculating Fibonacci of 40 recursively took 34.496809830000075 seconds.
|
||||||
|
Calculating Fibonacci of 40 with dynamic programming took 2.2804999844083795e-05 seconds.
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
Calculating Fibonacci of 45 recursively took 367.38581775700004 seconds.
|
||||||
|
Calculating Fibonacci of 45 with dynamic programming took 2.579200008767657e-05 seconds.
|
||||||
|
```
|
@ -0,0 +1,43 @@
|
|||||||
|
import functools, timeit
|
||||||
|
|
||||||
|
def fibo_rec(num):
|
||||||
|
if num == 0:
|
||||||
|
return 0
|
||||||
|
elif num == 1:
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return fibo_rec(num - 1) + fibo_rec(num - 2)
|
||||||
|
|
||||||
|
|
||||||
|
def fibonacci_dp(num, table):
|
||||||
|
if table[num] >= 0:
|
||||||
|
return table[num]
|
||||||
|
|
||||||
|
if (num == 0 or num == 1):
|
||||||
|
res = num
|
||||||
|
else:
|
||||||
|
res = fibonacci_dp(num - 1, table) + fibonacci_dp(num - 2, table)
|
||||||
|
|
||||||
|
table[num] = res
|
||||||
|
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
def fibo_dp(num):
|
||||||
|
table = [-1] * (num + 1)
|
||||||
|
return fibonacci_dp(num, table)
|
||||||
|
|
||||||
|
|
||||||
|
number = int(input('Enter a number: '))
|
||||||
|
|
||||||
|
|
||||||
|
recursive_timer = timeit.Timer(functools.partial(fibo_rec, number))
|
||||||
|
recursive_time = recursive_timer.timeit(1)
|
||||||
|
print(f'Calculating Fibonacci of {number} recursively took {recursive_time} seconds.')
|
||||||
|
|
||||||
|
dp_timer = timeit.Timer(functools.partial(fibo_dp, number))
|
||||||
|
dp_time = dp_timer.timeit(1)
|
||||||
|
print(f'Calculating Fibonacci of {number} with dynamic programming took {dp_time} seconds.')
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in new issue