"""
Learning Goals:
 - Define and recognize base cases and recursive cases in recursive code
 - Read and write basic recursive code
"""

def recursiveAddCards(cards):
    if cards == []:
        return 0
    else:
        smallerProblem = cards[1:]
        smallerResult = recursiveAddCards(smallerProblem)
        return cards[0] + smallerResult

###

def factorial(x):
    if x == 0:
        return 1
    if x == 1:
        return 1
    else:
        smallerResult = factorial(x - 1)
        return x * smallerResult

###

def countVowels(s):
    if s == "": # base case
        return 0
    else: # recursive case
        smaller = countVowels(s[1:])
        if s[0] in "aeiou":
            return smaller + 1
        else:
            return smaller

###

def removeDuplicates(lst):
    if lst == []: # base case
        return []
    else: # recursive case
        smaller = removeDuplicates(lst[1:])
        if lst[0] in smaller:
            return smaller
        else:
            return [lst[0]] + smaller

###

def recursiveMatch(lst1, lst2):
    if lst1 == []:
        return 0
    else:
        smaller = recursiveMatch(lst1[1:], lst2[1:])
        if lst1[0] == lst2[0]:
            return smaller + 1
        else:
            return smaller + 0
