Recursie versus iteratie
Wanneer kiest u welke?
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.
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
- Hoe recursie werkt
- Klassieke recursieve problemen
- Recursie versus iteratie
- Stack overflow voorkomen