def index(item, seq):
    return -1 if not seq else (0 if item == seq[0] else (1 + index(item, seq[1:])))

might look like a good attempt, but it is not. You cannot return -1 for unsuccesful tries in this way. You must interfere in the “upward” flow of the recursion.

def index(item, seq):
    if not seq:
        return -1
    elif item == seq[0]:
        return 0

    rest_index = index(item, seq[1:])
    if rest_index == -1:
        return -1
    else:
        return 1 + rest_index

Download .ipynb Download .py