Recursie#

Gebruik recursie om de volgende problemen op te lossen.

Opgaven#

one_to_sum#

De functie one_to_sum accepteert een integer n en heeft als resultaat de optelling van de getallen 1 tot en met n. Je mag hier niet de ingebouwde functie sum gebruiken.

def one_to_sum(n):
    """Sum all integer values from 1 to n
    """
    ...

Gebruik de volgende assertions om jouw oplossing te testen:

assert one_to_sum(0) == 0
assert one_to_sum(1) == 1 
assert one_to_sum(3) == 6   # 3 + 2 + 1
assert one_to_sum(5) == 15  # 5 + 4 + 3 + 2 + 1

sum_list#

De functie sum_list accepteert een list L met integers en heeft als resultaat de optelling van deze waarden. Je mag hier niet de ingebouwde funtie sum gebruiken.

def sum_list(L):
    """Sum all values in L
    """
    ...

Gebruik de volgende assertions om jouw oplossing te testen:

assert sum_list([2, 6, 9]) == 17
assert sum_list([4]) == 4
assert sum_list([]) == 0

mult_of_five#

De functie mult_of_five accepteert een integer n en heeft als resultaat een list met de veelvouden 1 tot en met n van 5.

def mult_of_five(n):
    """Return a list containing the first n multiples of 5
    """
    ...

Gebruik de volgende assertions om jow oplossingen te testen:

assert mult_of_five(0) == []
assert mult_of_five(1) == [5]
assert mult_of_five(2) == [5, 10]
assert mult_of_five(3) == [5, 10, 15] 

power_n#

De functie power_n accepteert de integers b en n en heeft als resultaat b tot de machtn. Ga er van uit dat zowel b als n groter zijn dan 0, je mag hier niet ** gebruiken om het resultaat te berekenen.

def power_n(b, n):
    """Return base b to the power of n
    """
    ...

Gebruik de volgende assertions om jouw oplossing te testen:

assert power_n(0, 0) == 1
assert power_n(0, 1) == 0
assert power_n(1, 1) == 1
assert power_n(2, 2) == 4
assert power_n(2, 3) == 8
assert power_n(3, 2) == 9

double_letters#

De functie double_letters accepteert een string s en heeft als resulaat een string met de karakters in s verdubbeld.

def double_letters(s):
    """Double all letters in s
    """
    ...

Gebruik de volgende assertions om jouw oplossingen te testen:

assert double_letters("hi") == "hhii"
assert double_letters("hello") == "hheelllloo"

no_x#

De functie no_x accepteert een string s en verwijdert alle x’en geeft het resultaat terug.

def no_x(s):
    """Return s with all x's removed 
    """
    ...

Gebruik de volgende assertions om jouw code te testen:

assert no_x("x1xx2x3") == "123"
assert no_x("xxx") == ""

all_star#

De functie all_star accepteert een string s en plaatst een * tussen de karakters en geeft het resultaat terug.

def all_star(s):
    """Returns string s with all characters separated by *
    """
    ...

Gebruik de volgende assertions om jouw oplossing te testen:

assert all_star("hello") == "h*e*l*l*o"
assert all_star("hi") == "h*i"
assert all_star("") == ""

divisible_by#

De functie divisible_by accepteert een integer n en een list L en geeft als resultaat een list terug met alle waarden in L deelbaar door n.

def divisible_by(n, L):
    """Return a list with values in L divisible by n
    """
    ...

Gebruik de volgende assertions om jouw oplossing te testen:

assert divisible_by(5, [15, 0, 23, 4]) == [15, 0]
assert divisible_by(3, [2, 4, 8, 10]) == []
assert divisible_by(2, []) == []

starts_with#

De functie starts_with accepteer een string s en een list met string L en heeft als resultaat een list met alle waarden in L die beginnen met s. Je mag hier niet de ingebouwde string methode startswith gebruiken.

def starts_with(s, L):
    """Return all strings in L which start with s
    """
    ...

Gebruik de volgende assertions om jouw oplossing te testen:

assert starts_with("a", []) == []
assert starts_with("a", ["bbc", "brits", "omroep"]) == []
assert starts_with("a", ["abc", "cde", "aha", "abba"]) == ["abc", "aha", "abba"]
assert starts_with("ab", ["abc", "cde", "aha", "abba"]) == ["abc", "abba"]
assert starts_with("abc", ["abc", "cde", "aha", "abba"]) == ["abc"]
assert starts_with("abcd", ["abc", "cde", "aha", "abba"]) == []

end_x#

De functie end_x accepteert een string s verplaatst alle x’en naar het einde van de string en geeft dit terug als resultaat.

def end_x(s):
    """Returns s with all x's moved to the end
    """
    ...

Gebruik de volgende assertions om jouw oplossing te testen:

assert end_x("abxyz") == "abyzx"
assert end_x("xxabc") == "abcxx"
assert end_x("abc") == "abc"

Oplossingen#

one_to_sum#

def one_to_sum(n):
    """Sum all integer values from 1 to n
    """
    if n == 0:
        return 0
    else:
        return n + one_to_sum(n - 1)
assert one_to_sum(0) == 0
assert one_to_sum(1) == 1 
assert one_to_sum(3) == 6   # 1 + 2 + 3
assert one_to_sum(5) == 15  # 1 + 2 + 3 + 4 + 5

sum_list#

def sum_list(L):
    """Sum all values in L
    """
    if len(L) == 0:
        return 0
    else:
        return L[0] + sum_list(L[1:])
assert sum_list([2, 6, 9]) == 17
assert sum_list([4]) == 4
assert sum_list([]) == 0

mult_of_five#

def mult_of_five(n):
    """Return a list containing the first n multiples of 5
    """
    if n == 0:
        return []
    else:
        return mult_of_five(n - 1) + [n * 5]
assert mult_of_five(0) == []
assert mult_of_five(1) == [5]
assert mult_of_five(2) == [5, 10]
assert mult_of_five(3) == [5, 10, 15]

power_n#

def power_n(b, n):
    """Return base b to the power of n
    """
    if n == 0:
        return 1
    else:
        return b * power_n(b, n - 1)
assert power_n(0, 0) == 1
assert power_n(0, 1) == 0
assert power_n(1, 1) == 1
assert power_n(2, 2) == 4
assert power_n(2, 3) == 8
assert power_n(3, 2) == 9

double_letters#

def double_letters(s):
    """Double all letters in s
    """
    if len(s) == 0:
        return ""
    else:
        return s[0] * 2 + double_letters(s[1:])
assert double_letters("hi") == "hhii"
assert double_letters("hello") == "hheelllloo"

no_x#

def no_x(s):
    """Return s with all x's removed 
    """
    if len(s) == 0:
        return ""
    elif s[0] == "x":
        return no_x(s[1:])
    else:
        return s[0] + no_x(s[1:])
assert no_x("x1xx2x3") == "123"
assert no_x("xxx") == ""

all_star#

def all_star(s):
    """Returns string s with all characters separated by *.
    """
    if len(s) <= 1:
        return s
    else:
        return s[0] + "*" + all_star(s[1:])
assert all_star("hello") == "h*e*l*l*o"
assert all_star("hi") == "h*i"
assert all_star("") == ""

divisible_by#

def divisible_by(n, L):
    """Return a list with values in L divisible by n
    """
    if len(L) == 0:
        return []
    elif L[0] % n == 0:
        return [L[0]] + divisible_by(n, L[1:])
    else:
        return divisible_by(n, L[1:])
assert divisible_by(5, [15, 0, 23, 4]) == [15, 0]
assert divisible_by(3, [2, 4, 8, 10]) == []
assert divisible_by(2, []) == []

starts_with#

def starts_with(s, L):
    """Return all strings in L which start with s
    """
    if len(L) == 0:
        return []
    elif s == L[0][:len(s)]:
        return [L[0]] + starts_with(s, L[1:])
    else:
        return starts_with(s, L[1:])
assert starts_with("a", []) == []
assert starts_with("a", ["bbc", "brits", "omroep"]) == []
assert starts_with("a", ["abc", "cde", "aha", "abba"]) == ["abc", "aha", "abba"]
assert starts_with("ab", ["abc", "cde", "aha", "abba"]) == ["abc", "abba"]
assert starts_with("abc", ["abc", "cde", "aha", "abba"]) == ["abc"]
assert starts_with("abcd", ["abc", "cde", "aha", "abba"]) == []

end_x#

def end_x(s):
    """Returns s with all x's moved to the end
    """
    if len(s) <= 1:
        return s
    elif s[0] == "x":
        return end_x(s[1:]) + s[0]
    else:
        return s[0] + end_x(s[1:])
assert end_x("abxyz") == "abyzx"
assert end_x("xxabc") == "abcxx"
assert end_x("abc") == "abc"