Understanding Caching in Python Fibonacci Series

  • Context: Python 
  • Thread starter Thread starter R.Harmon
  • Start date Start date
  • Tags Tags
    Python
Click For Summary
SUMMARY

The discussion focuses on implementing caching in Python to optimize the Fibonacci series calculation. The traditional recursive function is compared with a cached version that utilizes a dictionary to store previously computed values. The caching mechanism significantly reduces computation time by avoiding redundant calculations. The key line "cache = {0: 0, 1: 1}" initializes the cache with the first two Fibonacci numbers, enabling faster retrieval of these values during subsequent calculations.

PREREQUISITES
  • Understanding of Python programming language
  • Familiarity with recursive functions
  • Knowledge of Python dictionaries and their usage
  • Basic concepts of algorithm optimization
NEXT STEPS
  • Explore Python decorators for caching, such as functools.lru_cache
  • Learn about dynamic programming techniques for optimizing recursive algorithms
  • Investigate the time complexity of recursive vs. iterative Fibonacci implementations
  • Study Python's built-in data structures and their performance characteristics
USEFUL FOR

Beginner Python developers, algorithm enthusiasts, and anyone interested in optimizing recursive functions through caching techniques.

R.Harmon
Messages
23
Reaction score
0
Hey, I decided to start learning python so I downloaded it yesterday and decided to try and make a simple program to produce the Fibonacci series. I managed to do it using a function similar to that on wikibooks:

def fib(n):
if n < 2:
return n
else:
return fib(n - 1) + fib(n - 2)

However, beneath that is a version with cache, where the code is:

def fib(n):
cache = {0: 0, 1: 1}
def xfib(n):
if n not in cache:
cache[n] = xfib(n-1) + xfib(n-2)
return cache[n]
assert n >= 0
return xfib(n)

I tested both these and found the 2nd is far quicker to produce the series, but I don't really understand why, mainly because I can't seem to work out what the line "cache = {0: 0, 1: 1}" is doing, so I was wondering if anyone knows what this piece of code means, and what its telling the program to do subsequently? Hope that's clear, thanks for any help!
 
Technology news on Phys.org
It is creating a dictionary which stores the numbers '0' and '1' with the keys '0' and '1'
Dictionaries are an important paqrt of dynamic languages like python - think of them as mini databases, they let you store a value by giving it a key and then very quickly retreive it by just knowing the key. (They are called hashes in other languages)

In this case it just stores the fib sequence as it goes along and uses this cache to quickly calculate the next value by adding the previous two. The cache is a quick way of storing the last two values.
 
Thats the initial conditions. Its saying that fib(0) is 0 and fib(1) is 1.

for example
a={1:"hello", 2:"bye"}
for example declares dict indexed by the numbers, so
a[1] returns "hello"
a[2] returns "bye"
 
R.Harmon said:
I tested both these and found the 2nd is far quicker to produce the series, but I don't really understand why
Just count the number of addition operations required to do each.
 
That definitely helps clear things up, thanks a lot everyone.
 

Similar threads

Replies
2
Views
2K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 15 ·
Replies
15
Views
2K
  • · Replies 1 ·
Replies
1
Views
912
  • · Replies 9 ·
Replies
9
Views
3K
Replies
55
Views
7K
  • · Replies 11 ·
Replies
11
Views
1K
  • · Replies 34 ·
2
Replies
34
Views
5K
  • · Replies 7 ·
Replies
7
Views
5K
  • · Replies 17 ·
Replies
17
Views
2K