Here is is_even() again:

In [1]:
def is_even(n):
    if n == 0:
        return True
    return not is_even(n-1)

Let's trace is_even(5):

          0
         /|
     True |
        \ 1
        / |
   False\ |
          2
         /|
     True |
        \ 3
         /|
    False | 
        \ 4
    True /|
        \ |
          5
          |
        False  


Consider a call to is_even(2). To evaluate it, we need to call is_even(1), and then return the opposite of what that returns. is_even(1) returns not is_even(0), which is False. So is_even(2) return not False, i.e., it returns True.