# question 2 def fib(n): # inefficient recursive fibonacci, counts down from "n" while each iteration spawns 2 recursive calls if n == 0: return 0 if n == 1: return 1 else: return fib(n - 1) + fib(n - 2) def fast_fib(n, n_minus_2=0, n_minus_1=1): # efficient recursive fibonacci, by going forward with each iteration spawning only 1 recursive call if n == 0: return 0 if n == 1: return n_minus_1 else: return fast_fib(n - 1, n_minus_1, n_minus_1 + n_minus_2)