lec20, Thu 12/05
Recursion + Exam Review
Code from lecture
def sumOdd( L ): """ return a sum of odd integers in L recursive solution If the list is empty or contains odd values return the sentinel value of None """ if len(L) == 1: # base case if (L % 2 == 1): # odd return L elif (L % 2 == 0): # even return None else: # recursive case last_el = L.pop() if (last_el % 2 == 1): return last_el + sumOdd(L) # input the smaller list else: return sumOdd(L)
These were the cases (input and output) we identified that we can test our algorithm on:
 --> None  --> 1  --> None [1,1] --> 2 [2,2] --> None [1,2] --> 1
Notice that the above solution does not handle the empty list. How would you modify the code to correctly return
None if the list is empty?
This is just one possible implementation of this function. Alternatively, you can be processing the list starting from the first element instead.
A great question/discussion during the lecture pointed out that
None as a sentinel value allows us to distinguish it from 0, which is a valid sum if our list is not empty and contains, for example,