Lecture 23 — Exercises¶
Solutions to the problems below must be sent to Submitty for automatic scoring. A separate file must be submitted for each problem. Start by downloading lec23_ex.zip from the Course Materials section of Submitty.
The following code recursively calculates the maximum value in a list:
def recursive_max_impl(L, i): """ The actual recursive function. """ if i == len(L) - 1: return L[i] else: return max(L[i], recursive_max_impl(L, i + 1)) def recursive_max(L): """ The driver for the recursive function. This handles the special case of an empty list and otherwise makes the initial call to the recursive function. """ if len(L) == 0: return -99999 # By convention else: return recursive_max_impl(L, 0) if __name__ == "__main__": L1 = [5] print(recursive_max(L1)) L2 = [24, 23.1, 12, 15, 1] print(recursive_max(L2)) L2.append(55) print(recursive_max(L2))
Using this as a guide, write a recursive function to add the values in a list. You should have to change very little code. Implement your code in the provided file
prob1.py.Implement a recursive solution to the Fibonacci number function definition given during lecture. Implement your code in the provided file
prob2.py.Looking carefully at the Fibonacci definition shows that calculating Fibonacci number \(f_{n-1}\) requires calculating Fibonacci number \(f_{n-2}\), which is also required for calculating Fibonacci number \(f_n\). This means there is redundant computation. This redundancy gets worse for numbers \(f_{n-3}\), \(f_{n-4}\), etc.
Fortunately, the Fibonacci sequence is relatively easy to compute non-recursively. This is your problem here. The trick is to build up the solution using a for loop that calculates \(f_2\), then \(f_3\), then \(f_4\), etc. Implement your solution in
prob3.py.Out of curiosity, you could run your solutions to the previous two problems on large values of
nand time the difference.