C Academy · Les

Recursie versus iteratie

Wanneer kiest u welke?

Les 3 van 413 stappen

Recursie versus iteratie is een gratis C Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C Academy bevat in totaal 4 lessen.

Twee manieren om te herhalen

Veel problemen kun je oplossen met recursie of iteratie. Bij iteratie gebruik je lussen; bij recursie gebruik je functieaanroepen.

Beide kunnen hetzelfde resultaat opleveren, maar ze verschillen in stijl, geheugengebruik en snelheid.

Faculteit met een lus

Hier is de faculteit iteratief geschreven met een for-lus. De functie roept zichzelf niet aan; één variabele houdt het product bij.

#include <stdio.h>

long factorial(int n) {
    long result = 1;
    for (int i = 2; i <= n; i++)
        result *= i;
    return result;
}

int main(void) {
    printf("%ld\n", factorial(6));
    return 0;
}

Faculteit met recursie

De recursieve versie is korter en volgt de wiskundige definitie rechtstreeks.

Beide drukken 720 af voor factorial(6), maar ze gebruiken een andere aanpak.

long factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

Verschillen in geheugengebruik

Iteratie gebruikt meestal een vaste, kleine hoeveelheid geheugen: slechts enkele lokale variabelen.

Recursie voegt voor elke aanroep een stackframe toe. Diepe recursie gebruikt dus meer geheugen en kan de stackruimte uitputten.

Verschillen in snelheid

Elke recursieve aanroep heeft een kleine kostprijs: er wordt een frame aangemaakt en weer verlaten.

Voor eenvoudige teltaken zijn lussen vaak iets sneller, omdat ze die aanroepoverhead vermijden.

Wanneer recursie de beste keuze is

Recursie is bijzonder geschikt wanneer het probleem van nature recursief is, zoals bij bomen, geneste structuren of verdeel-en-heersalgoritmen.

In zulke gevallen is recursieve code korter en duidelijker dan een gelijkwaardige lus met een handmatige stack.

Wanneer iteratie de beste keuze is

Voor eenvoudige lineaire herhaling, zoals een array optellen of tellen, is een lus eenvoudiger en gebruikt die constante hoeveelheid geheugen.

Een lus voorkomt bovendien elk risico op stackoverloop bij grote invoer.

int sum_array(int a[], int n) {
    int total = 0;
    for (int i = 0; i < n; i++)
        total += a[i];
    return total;
}

Dezelfde taak, beide stijlen

Je kunt de getallen 1 tot en met n op beide manieren optellen. Hier is de iteratieve versie, die hetzelfde antwoord retourneert als recursie.

#include <stdio.h>

int sum_to(int n) {
    int total = 0;
    for (int i = 1; i <= n; i++)
        total += i;
    return total;
}

int main(void) {
    printf("%d\n", sum_to(100));
    return 0;
}

Recursie omzetten naar een lus

Elke recursie kan worden herschreven als iteratie, soms met een eigen expliciete stack.

Eenvoudige lineaire recursie, zoals een faculteit of som, zet je om in een gewone lus met een accumulatorvariabele.

#include <stdio.h>

int main(void) {
    int n = 5, result = 1;
    while (n > 1) { result *= n; n--; }
    printf("%d\n", result);
    return 0;
}

Opmerking over staartrecursie

Een staartrecursieve aanroep is de laatste actie in een functie. Sommige compilers optimaliseren die tot een lus door één frame opnieuw te gebruiken.

C garandeert dit niet, dus vertrouw er niet op bij diepe recursie.

int sum_tail(int n, int acc) {
    if (n == 0) return acc;
    return sum_tail(n - 1, acc + n);
}

Een aanpak kiezen

Vraag jezelf af: is het probleem van nature genest of een verdeel-en-heersprobleem? Dan past recursie goed.

Gaat het om eenvoudige lineaire herhaling met mogelijk zeer grote invoer? Dan is iteratie veiliger en vaak sneller.

Korte controle

Vergelijk de twee aanpakken.

Samenvatting

Met recursie en iteratie kun je dezelfde problemen oplossen. Lussen gebruiken constante hoeveelheid geheugen en zijn uitstekend voor lineaire taken; recursie is duidelijker voor geneste en verdeel-en-heersproblemen, maar kost per aanroep een stackframe.

Gratis beginnen

Leer C met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
39
Lessen
144

Veelgestelde vragen

Is de les “Recursie versus iteratie” gratis?

Ja — de volledige tekst van “Recursie versus iteratie” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus C Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus C Academy bevat in totaal 4 lessen.

Wat leer ik in “Recursie versus iteratie”?

Wanneer kiest u welke? Je oefent met C Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met C Academy te beginnen?

Ervaring vooraf is niet nodig. C Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Recursie versus iteratie”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over C Academy?

Ja. Elke les over C Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Hoe recursie werkt
  2. Klassieke recursieve problemen
  3. Recursie versus iteratie
  4. Stack overflow voorkomen
← Terug naar C Academy