""" Week5-2 Notes """

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

print("recursiveAddCards result:", recursiveAddCards([5,7,2,3]))
print("---------------")
###

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

print("factorial result:", factorial(5))
print("---------------")

###

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

print("countVowels result:", countVowels("apple"))
print("---------------")

'''
# countVowels: An alternative approach with multiple recursive cases based on the smaller part.
def countVowels(s):
    if s == "": # base case
        return 0
    elif s[0] in "aeiouAEIOUAEIOU": # recursive case
        smaller = countVowels(s[1:])
        return 1 + smaller
    else:
        smaller = countVowels(s[1:])
        return smaller

print("countVowels result:", countVowels("apple"))
'''


###
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

print("removeDuplicates result:", removeDuplicates([1, 2, 1, 2, 3, 4, 3, 3]))
print("---------------")

###


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

print("recursiveMatch result:", recursiveMatch([1, 2, 3, 4], [1,5,3,7]))
print("---------------")