C Academy · Les

Hoe recursie werkt

Basisgevallen en de callstack.

Les 1 van 413 stappen

Hoe recursie werkt is een gratis C Academy-les op CoddyKit. Dit is les 1 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.

Wat is recursie?

Recursie betekent dat een functie zichzelf aanroept om een probleem op te lossen. Elke aanroep werkt met een kleiner deel van het oorspronkelijke probleem.

In C kan elke functie zichzelf aanroepen, zolang er een manier is waarop de aanroepen uiteindelijk stoppen.

Het basisgeval

Elke recursieve functie heeft een basisgeval nodig: een voorwaarde waarbij de functie stopt met zichzelf aanroepen en rechtstreeks terugkeert.

Zonder basisgeval zou de functie zichzelf oneindig blijven aanroepen en zou het programma crashen.

int countdown(int n) {
    if (n == 0) return 0; /* base case */
    return countdown(n - 1);
}

Het recursieve geval

Het recursieve geval is het deel waarin de functie zichzelf aanroept met een gewijzigd argument.

Dat argument moet naar het basisgeval toe bewegen, anders eindigt de recursie nooit.

int sum_to(int n) {
    if (n == 0) return 0;       /* base case */
    return n + sum_to(n - 1);   /* recursive case */
}

Een eerste volledig programma

Laten we een volledig programma uitvoeren dat met recursie de getallen van 1 tot en met 5 optelt.

Het resultaat hoort 15 te zijn.

#include <stdio.h>

int sum_to(int n) {
    if (n == 0) return 0;
    return n + sum_to(n - 1);
}

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

De aanroepen traceren

Het helpt om recursie met de hand te volgen. Voor sum_to(3):

sum_to(3) = 3 + sum_to(2)
sum_to(2) = 2 + sum_to(1)
sum_to(1) = 1 + sum_to(0)
sum_to(0) = 0

De aanroepen keren daarna terug naar boven: eerst 1, dan 3 en vervolgens 6.

De aanroepstack

Elke functieaanroep krijgt een eigen plaats op de aanroepstack, waarin de parameters en lokale variabelen worden bewaard.

Wanneer de uitvoering dieper gaat, stapelen de frames zich op. Zodra een aanroep terugkeert, wordt het frame verwijderd en gaat de besturing terug naar de aanroeper.

Heen en terug door de recursie

Recursie heeft twee fasen. Heen gaan betekent dat aanroepen steeds dieper gaan, in de richting van het basisgeval.

Teruggaan begint wanneer het basisgeval terugkeert en elke aanroep zijn werk voltooit met de teruggegeven waarde.

#include <stdio.h>

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

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

Teruggegeven waarden vloeien terug

De waarde die door een diepere aanroep wordt teruggegeven, wordt gebruikt door de aanroep die deze heeft uitgevoerd.

Daarom is de volgorde belangrijk: de diepste aanroep wordt als eerste voltooid, waarna de resultaten op weg terug naar boven in de stack worden gecombineerd.

int power(int base, int exp) {
    if (exp == 0) return 1;
    return base * power(base, exp - 1);
}

Afdrukken tijdens recursie

U kunt vóór of na de recursieve aanroep afdrukken. Afdrukken vóór de aanroep toont getallen die naar beneden gaan; afdrukken erna toont getallen die weer naar boven komen.

#include <stdio.h>

void down(int n) {
    if (n == 0) return;
    printf("%d ", n);
    down(n - 1);
}

int main(void) {
    down(5);
    printf("\n");
    return 0;
}

Afdrukken op de weg terug

Verplaats de printf na de recursieve aanroep om de volgorde om te keren. De diepste aanroep drukt als eerste af.

Dit drukt 1 2 3 4 5 af in plaats van 5 4 3 2 1.

#include <stdio.h>

void up(int n) {
    if (n == 0) return;
    up(n - 1);
    printf("%d ", n);
}

int main(void) {
    up(5);
    printf("\n");
    return 0;
}

Twee regels om te onthouden

Een correcte recursieve functie volgt twee regels:

1. De functie heeft ten minste één basisgeval dat terugkeert zonder recursie.
2. Elke recursieve aanroep brengt het argument dichter bij een basisgeval.

Als u een van beide regels breekt, blijft het programma oneindig doorlopen.

Snelle controle

Test uw begrip van de basisprincipes van recursie.

Samenvatting

Recursie lost een probleem op door zichzelf aan te roepen met kleinere invoer. U hebt altijd een basisgeval nodig om te stoppen en een recursief geval dat daar naartoe beweegt.

Elke aanroep gebruikt een stackframe; resultaten vloeien terug terwijl de aanroepen terugkeren.

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 “Hoe recursie werkt” gratis?

Ja — de volledige tekst van “Hoe recursie werkt” 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 “Hoe recursie werkt”?

Basisgevallen en de callstack. 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 1 van 4.

Hoe lang duurt de les “Hoe recursie werkt”?

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