Dubbele faculteit (5 ptn)

Een dubbele faculteit !! wordt als volgt gedefinieerd:

\[\begin{array}{rl} n!!=n \cdot (n-2) \cdot (n-4) \cdot ... \cdot 4 \cdot 2 & \text{(n even)} \\ n!!=n \cdot (n-2) \cdot (n-4) \cdot ... \cdot 3 \cdot 1 & \text{(n oneven)} \end{array}\]

Opgave

Hieronder vind je een algoritme dat n!! uitrekent:

def dubbele_faculteit(n):
    dubbele_faculteiten = [1, 1]
    hoogst_bepaalde = 1
    while hoogst_bepaalde < n:
        hoogst_bepaalde = hoogst_bepaalde + 1
        dubbele_faculteiten.append(dubbele_faculteiten[-2] * hoogst_bepaalde)
    return dubbele_faculteiten[-1]

Dit was oorspronkelijk een recursief algoritme, waarbij er een geziene techniek gebruikt werd om de functie te verbeteren. Kopieer onderstaand kader in het invulveld, waarbij je antwoord op de vragen over dit algoritme. Vervang telkens <jouw antwoord> door jouw antwoord.

# Vraag 1: Welke techniek werd hier gebruikt? Wees specifiek!
# Antwoord: <jouw antwoord>

# Vraag 2: Op welke manier/manieren verandert deze techniek het algoritme?
# Antwoord: <jouw antwoord>

# Vraag 3: Wat is de tijdscomplexiteit van het algoritme mét en zonder de techniek? 
# Kies uit O(sqrt(n)), O(n), O(n²), O(n³), O(log(n)), O(n*log(n)), O(exp)
# Complexiteit met techniek: <jouw antwoord>
# Complexiteit zonder techniek: <jouw antwoord>