Java -recursie


Java-recursie

Recursie is de techniek van het zelf aanroepen van een functie. Deze techniek biedt een manier om gecompliceerde problemen op te splitsen in eenvoudige problemen die gemakkelijker op te lossen zijn.

Recursie is misschien een beetje moeilijk te begrijpen. De beste manier om erachter te komen hoe het werkt, is door ermee te experimenteren.


Voorbeeld van recursie

Twee getallen bij elkaar optellen is eenvoudig, maar het toevoegen van een reeks getallen is ingewikkelder. In het volgende voorbeeld wordt recursie gebruikt om een ​​reeks getallen bij elkaar op te tellen door het op te splitsen in de eenvoudige taak om twee getallen toe te voegen:

Voorbeeld

Gebruik recursie om alle getallen tot 10 op te tellen.

public class Main {
  public static void main(String[] args) {
    int result = sum(10);
    System.out.println(result);
  }
  public static int sum(int k) {
    if (k > 0) {
      return k + sum(k - 1);
    } else {
      return 0;
    }
  }
}

Voorbeeld uitgelegd

Wanneer de sum()functie wordt aangeroepen, wordt een parameter toegevoegd kaan de som van alle getallen kleiner dan ken wordt het resultaat geretourneerd. Wanneer k 0 wordt, retourneert de functie gewoon 0. Tijdens het uitvoeren volgt het programma deze stappen:

10 + som(9)
10 + ( 9 + som(8) )
10 + ( 9 + ( 8 + som(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + som(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0

Aangezien de functie zichzelf niet aanroept wanneer k0 is, stopt het programma daar en retourneert het resultaat.


Stopconditie

Net zoals lussen het probleem van oneindige lussen kunnen tegenkomen, kunnen recursieve functies het probleem van oneindige recursie tegenkomen. Oneindige recursie is wanneer de functie zichzelf nooit stopt. Elke recursieve functie zou een stopconditie moeten hebben, wat de conditie is waarbij de functie stopt met zichzelf aan te roepen. In het vorige voorbeeld is de stopconditie wanneer de parameter k0 wordt.

Het is handig om verschillende voorbeelden te zien om het concept beter te begrijpen. In dit voorbeeld voegt de functie een reeks getallen toe tussen een begin en een einde. De stopvoorwaarde voor deze recursieve functie is wanneer end niet groter is dan start :

Voorbeeld

Gebruik recursie om alle getallen tussen 5 en 10 op te tellen.

public class Main {
  public static void main(String[] args) {
    int result = sum(5, 10);
    System.out.println(result);
  }
  public static int sum(int start, int end) {
    if (end > start) {
      return end + sum(start, end - 1);
    } else {
      return end;
    }
  }
}