Kursusindhold
Java Udvidet
Java Udvidet
Rekursion
Hvordan kan du nemt ødelægge din kode?
Hvorfor kan dette ødelægge koden? Fordi det kan føre til uendelig rekursion, hvilket vil forbruge hukommelse uden stop og nedsætte enhedens ydeevne. Så hvorfor har vi overhovedet brug for rekursion? I visse tilfælde kan rekursion være nyttigt, men det skal anvendes med forsigtighed. For eksempel kan rekursion erstatte et while-loop. Lad os se på et eksempel, hvor rekursion bruges til at beregne summen af alle tal op til et tal, der gives som parameter:
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; } }
Metoden calculateSum()
kalder sig selv med reducerede værdier. Vi har også et udgangspunkt fra denne rekursion, når variablen num
bliver nul. Denne metode beregner summen af alle tal fra 1 til parameteren, i dette tilfælde 5
. Lad os se på et flowchart, der viser, hvordan rekursion fungerer ved hjælp af denne metode som eksempel:
Eksemplet ovenfor demonstrerer, hvordan metoden kalder sig selv med reducerede værdier, og når den når nul, går den tilbage opad ved at summere værdierne. Vi kan også observere, hvordan kroppen af if
-blokken udføres, hvor vi lægger num
til resultatet af metodekaldet med en reduceret værdi. De mellemliggende værdier efter hvert metodekald er angivet nær pilene.
Kan vi undgå at bruge rekursion?
Rekursion kan også erstattes med et almindeligt loop. Lad os se på et eksempel, hvor vi først bruger en rekursiv metode og derefter bruger et for
-loop til at udføre den samme operation:
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; } }
Her kan vi se, hvordan vi erstatter vores rekursive metode med et almindeligt for
-loop, hvor vi bruger variablen i
til at øge vores result
med i
hver gang, indtil det når det angivne tal num
, som er parameteren i metoden.
Konklusion
Afslutningsvis kan rekursive metoder være nyttige, men også risikable. Rekursion kan ofte erstattes af loops, og selvom det kan forenkle visse opgaver, kan det også give problemer, hvis det ikke bruges omhyggeligt. Hvis du vælger at bruge rekursion, selv med erfaring, bør du altid være forsigtig.
1. Hvad er rekursion i Java?
2. Hvilken er bedre at bruge, rekursion eller et almindeligt loop?
Tak for dine kommentarer!