Kursinnhold
Java Utvidet
Java Utvidet
Rekursjon
Hvordan ødelegge koden din enkelt?
Hvorfor kan dette ødelegge koden? Fordi det kan føre til uendelig rekursjon, som vil bruke opp minnet og redusere enhetens ytelse. Så hvorfor trenger vi rekursjon i det hele tatt? I noen tilfeller kan rekursjon være nyttig, men det bør brukes med forsiktighet. For eksempel kan rekursjon erstatte en while-løkke. La oss se på et eksempel på bruk av rekursjon for å beregne summen av alle tall opp til et tall som sendes 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()
kaller seg selv med reduserte verdier. Vi har også et utgangspunkt fra denne rekursjonen når variabelen num
blir null. Denne metoden beregner summen av alle tall fra 1 til parameteren, i vårt tilfelle 5
. La oss se på flytskjemaet som viser hvordan rekursjon fungerer ved å bruke denne metoden som eksempel:
Eksempelet ovenfor viser hvordan metoden kaller seg selv med reduserte verdier, og når den når null, går den tilbake oppover ved å summere verdiene. Vi kan også observere hvordan kroppen til if
-blokken utføres, der vi legger til num
til resultatet av metodekallet med en redusert verdi. De mellomliggende verdiene etter hvert metodekall er angitt ved pilene.
Kan vi unngå å bruke rekursjon?
Rekursjon kan også erstattes med en vanlig løkke. La oss se på et eksempel der vi først bruker en rekursiv metode og deretter bruker en for
-løkke for å utføre den samme operasjonen:
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 ser vi hvordan vi erstatter vår rekursive metode med en vanlig for
-løkke, der vi bruker variabelen i
til å øke result
med i
hver gang til den når det angitte tallet num
, som er parameteren i metoden.
Konklusjon
Avslutningsvis kan rekursive metoder være nyttige, men også risikable. Rekursjon kan ofte erstattes av løkker, og selv om det kan forenkle enkelte oppgaver, kan det også føre til problemer hvis det ikke brukes forsiktig. Dersom du velger å bruke rekursjon, selv med erfaring, bør du være varsom.
1. Hva er rekursjon i Java?
2. Hva er best å bruke, rekursjon eller en vanlig løkke?
Takk for tilbakemeldingene dine!