Previous Lecture lec20

# 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[0] % 2 == 1): # odd
return L[0]
elif (L[0] % 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] --> 1
[2] --> 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, `[-1, 1]`.