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