def rev(items):
    # base case: no work to do
    if items == []:
        return []
    # recursive case: reverse the tail of the list
    # beware: don't use ".append" (which returns None)
    else:
        return rev(items[1:]) + [items[0]]

# another way
def rev2(items):
    # base case
    if items == []:
        return []
    # recursive case: split into last element of list and the rest
    else:
        return [items[-1]] + rev2(items[:-1])
    

def test_rev():
    a = ['z', 'y', 'x', 'w', 'v']
    assert(rev(a) == ['v', 'w', 'x', 'y', 'z'])
    assert(rev(['x']) == ['x'])
    assert(rev([]) == [])
    print("Done testing reverse")

def test_rev2():
    a = ['z', 'y', 'x', 'w', 'v']
    assert(rev2(a) == ['v', 'w', 'x', 'y', 'z'])
    assert(rev2(['x']) == ['x'])
    assert(rev2([]) == [])
    print("Done testing reverse")
