Java Rekursie


Java Rekursie

Rekursie is die tegniek om 'n funksie-oproep self te maak. Hierdie tegniek bied 'n manier om ingewikkelde probleme af te breek in eenvoudige probleme wat makliker is om op te los.

Rekursie kan 'n bietjie moeilik wees om te verstaan. Die beste manier om uit te vind hoe dit werk, is om daarmee te eksperimenteer.


Rekursie Voorbeeld

Om twee getalle bymekaar te tel is maklik om te doen, maar om 'n reeks getalle by te voeg is meer ingewikkeld. In die volgende voorbeeld word rekursie gebruik om 'n reeks getalle bymekaar te tel deur dit af te breek in die eenvoudige taak om twee getalle by te tel:

Voorbeeld

Gebruik rekursie om al die getalle tot 10 by te tel.

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 Verduidelik

Wanneer die sum()funksie geroep word, voeg dit parameter kby die som van alle getalle kleiner as ken gee die resultaat terug. Wanneer k 0 word, gee die funksie net 0 terug. Wanneer dit loop, volg die program hierdie stappe:

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

Aangesien die funksie homself nie noem wanneer k0 is nie, stop die program daar en gee die resultaat terug.


Stakende toestand

Net soos lusse die probleem van oneindige lus kan raakloop, kan rekursiewe funksies die probleem van oneindige rekursie raakloop. Oneindige rekursie is wanneer die funksie nooit ophou om homself te noem nie. Elke rekursiewe funksie moet 'n stoptoestand hê, wat die toestand is waar die funksie ophou om homself te roep. In die vorige voorbeeld is die stoptoestand wanneer die parameter k0 word.

Dit is nuttig om 'n verskeidenheid verskillende voorbeelde te sien om die konsep beter te verstaan. In hierdie voorbeeld voeg die funksie 'n reeks getalle tussen 'n begin en 'n einde by. Die stoptoestand vir hierdie rekursiewe funksie is wanneer einde nie groter as begin is nie :

Voorbeeld

Gebruik rekursie om al die getalle tussen 5 en 10 by te tel.

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;
    }
  }
}