Cursusinhoud
Java Uitgebreid
Java Uitgebreid
Recursie
Hoe kun je eenvoudig je code laten falen?
Waarom kan dit de code laten falen? Omdat het kan leiden tot oneindige recursie, wat eindeloos geheugen zal verbruiken en de prestaties van het apparaat zal verminderen. Waarom hebben we recursie dan überhaupt nodig? In sommige gevallen kan recursie nuttig zijn, maar het moet zorgvuldig worden toegepast. Recursie kan bijvoorbeeld een while-lus vervangen. Laten we een voorbeeld bekijken van het gebruik van recursie om de som te berekenen van alle getallen tot aan een als parameter doorgegeven getal:
Main.java
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below System.out.println(calculateSum(5)); } // method to calculate the sum of numbers from 1 to num using recursion static int calculateSum(int num) { // if num is greater than 0, recursively calculate the sum if (num > 0) { num = num + calculateSum(num - 1); } else { return 0; } return num; } }
De methode calculateSum()
roept zichzelf aan met verlaagde waarden. Er is ook een eindpunt voor deze recursie wanneer de variabele num
nul wordt. Deze methode berekent de som van alle getallen van 1 tot aan de parameter, in ons geval 5
. Bekijk het stroomschema dat laat zien hoe recursie werkt aan de hand van deze methode als voorbeeld:
Het bovenstaande voorbeeld toont hoe de methode zichzelf aanroept met verlaagde waarden, en wanneer deze nul bereikt, keert het terug omhoog door de waarden op te tellen. We kunnen ook zien hoe het lichaam van het if
-blok wordt uitgevoerd, waarbij we num
optellen bij het resultaat van de methode-aanroep met een verlaagde waarde. De tussenliggende waarden na elke methode-aanroep worden aangegeven bij de pijlen.
Kunnen we recursie vermijden?
Recursie kan ook worden vervangen door een reguliere lus. Bekijk een voorbeeld waarbij we eerst een recursieve methode gebruiken en daarna een for
-lus om dezelfde bewerking uit te voeren:
Main.java
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below int num = 5; // printing the result of the recursive sum calculation System.out.println("Result using recursion: " + calculateSum(num)); int result = 0; // calculating the sum using a for-loop for (int i = 1; i <= num; i++) { result = result + i; } // printing the result of the sum calculation using the for-loop System.out.println("Result using for-loop: " + result); } // method to calculate the sum of numbers from 1 to num using recursion static int calculateSum(int num) { // if num is greater than 0, recursively calculate the sum if (num > 0) { num = num + calculateSum(num - 1); } else { return 0; } return num; } }
Hier zien we hoe we onze recursieve methode vervangen door een reguliere for
-lus, waarbij we de variabele i
gebruiken om ons result
telkens met i
te verhogen totdat het het opgegeven getal num
bereikt, dat als parameter aan de methode wordt meegegeven.
Conclusie
Samenvattend kunnen recursieve methoden nuttig zijn, maar ook risicovol. Recursie kan vaak worden vervangen door lussen, en hoewel het bepaalde taken kan vereenvoudigen, kan het ook problemen veroorzaken als het niet zorgvuldig wordt gebruikt. Als u ervoor kiest om recursie te gebruiken, zelfs met ervaring, wees dan altijd voorzichtig.
1. Wat is recursie in Java?
2. Wat is beter om te gebruiken, recursie of een reguliere lus?
Bedankt voor je feedback!