This code comes from YouTube channel Socratica, great video on Recursive function to print out the Fibonacci sequence. The code starts with a simple Recursive function to print the first 10 numbers, it works great until you add more numbers and then your computer will slow to a crawl. So Memoization was added aka caching then function had some error checking to prevent floats, negative integers, and bad inputs of like ‘one’.
# Fibonacci Sequence first 8, goes on forever.
# 1, 1, 2, 3, 5, 8, 13, 21
# 1 + 1
# 1 + 2
# 2 + 3
# 3 + 5 etc.
# First simple version, slow when adding more of the sequence and accepts wrong data types.
def fibonacci(n) :
if n == 1:
return 1
elif n == 2:
return 1
elif n > 2:
return fibonacci(n - 1) + fibonacci(n - 2)
for n in range(1, 11):
# Change the 11 above to 101 and watch this code slow to a crawl, the fix will be on next code snippet below.
print(n, ':', fibonacci(n))
# Second version with more error checking and lru_cache support, very fast
# Memoization aka caching, without this the code will be slow
from functools import lru_cache
@lru_cache(maxsize = 1000)
def fibonacci(n) :
if type(n) != int:
raise TypeError('n must be a positive int')
if n < 1:
raise ValueError('n must be a positive int')
if n == 1:
return 1
elif n == 2:
return 1
elif n > 2:
return fibonacci(n - 1) + fibonacci(n - 2)
for n in range(1, 101):
print(n, ':', fibonacci(n))