Implement a Fibonnaci Sequence in three different ways:
Remember that a fibonacci sequence: 0,1,1,2,3,5,8,13,21,… starts off with a base case checking to see if n = 0 or 1, then it returns 1.
Else it returns fib(n-1)+fib(n+2).
The recursive solution is exponential time Big-O , with O(2^n). However, its a very simple and basic implementation to consider:
def fib_rec(n): # Base Case if n == 0 or n == 1: return n # Recursion else: return fib_rec(n-1) + fib_rec(n-2)
fib_rec(10)
55
In the form it is implemented here, the cache is set beforehand and is based on the desired n number of the Fibonacci Sequence. Note how we check it the cache[n] != None, meaning we have a check to know weather or not to keep setting the cache (and more importantly keep cache of old results!)
# Instantiate Cache information n = 10 cache = [None] * (n + 1) def fib_dyn(n): # Base Case if n == 0 or n == 1: return n # Check cache if cache[n] != None: return cache[n] # Keep setting cache cache[n] = fib_dyn(n-1) + fib_dyn(n-2) return cache[n]
fib_dyn(10)
55
In this solution we can take advantage of Python’s tuple unpacking.
def fib_iter(n): # Set starting point a = 0 b = 1 # Follow algorithm for i in range(n): a, b = b, a + b return a
fib_iter(23)
28657
Run the cell below to test your solutions, simply uncomment the solution functions you wish to test!
""" UNCOMMENT THE CODE AT THE BOTTOM OF THIS CELL TO SELECT WHICH SOLUTIONS TO TEST. THEN RUN THE CELL. """ from nose.tools import assert_equal class TestFib(object): def test(self,solution): assert_equal(solution(10),55) assert_equal(solution(1),1) assert_equal(solution(23),28657) print('Passed all tests.') # UNCOMMENT FOR CORRESPONDING FUNCTION t = TestFib() t.test(fib_rec) #t.test(fib_dyn) # Note, will need to reset cache size for each test! #t.test(fib_iter)
Passed all tests.
Hopefully this interview question served as a good exercise in exploring recursion, dynamic programming, and iterative solutions for a single problem! Its good to work through all three because in an interview a common question may just begin with requesting a recursive solution and then checking to see if you can implement the other forms.
Recommended: Introduction to Recursion
If you like my post please follow me to read my latest post on programming and technology.
Problem Statement: Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. Example…
Given an integer A. Compute and return the square root of A. If A is…
Given a zero-based permutation nums (0-indexed), build an array ans of the same length where…
A heap is a specialized tree-based data structure that satisfies the heap property. It is…
What is the Lowest Common Ancestor? In a tree, the lowest common ancestor (LCA) of…