Drop links or images here to add them to the editor.

We definiëren het kwadraat van een lijst getallen als de lijst van de kwadraten van elk van die getallen. Nemen we $$a = [a_0, a_1, ..., a_{N-1}]$$, dan geldt $$a^2 = [a_0^2, a_1^2, ..., a_{N-1}^2]$$. In deze oefening gaan we op zoek naar alle vierkantswortels $$w$$ van een lijst $$c$$. De lijst $$w$$ voldoet dus aan $$w^2 = c$$. Een lijst van $$N$$ getallen verschillende van 0, heeft dus $$2^N$$ wortels. Schrijf een RECURSIEVE functie lijst_wortels() met als enig argument een lijst van strikt positieve reële getallen (dus verschillend van 0.0). De functie levert een lijst van lijsten $$w$$ op, waarbij elke lijst een wortel van het argument voorstelt. Alle wortels $$w$$ zijn verschillend. De lijst van wortels is willekeurig geordend. Als startpunt krijg je de recursieve functie prefix_lijst():

def prefix_lijst(i, l):
    if len(l) == 0:
        return []
    else:
        return [[i] + l[0]] + prefix_lijst(i, l[1:])
Deze functie heeft twee argumenten. Het tweede argument ($$l$$) is een lijst van lijsten. De functie voegt het eerste argument $$i$$ vooraan toe aan elk van de lijsten van $$l$$.

LET OP: je functie MOET recursief geprogrammeerd worden, en mag dus geen lusconstructies of comprehensies bevatten. Indien je gebruik wenst te maken van de functie prefix_lijst(), dan moet je die ook indienen.

Voorbeeld

l = [1, 1]
print(lijst_wortels(l))
#[[1.0, 1.0], [1.0, -1.0], [-1.0, 1.0], [-1.0, -1.0]]   
l = [1, 4, 9]
print(lijst_wortels(l))
#[[1.0, 2.0, 3.0], [1.0, 2.0, -3.0], [1.0, -2.0, 3.0], [1.0, -2.0, -3.0], [-1.0, 2.0, 3.0], [-1.0, 2.0, -3.0], [-1.0, -2.0, 3.0], [-1.0, -2.0, -3.0]]