Rekursjon i Java

Rekursjon i Java
Rekursjon i Java er kall av en metode, etter metoden, fra metoden. Denne handlingen gjentar seg til en tilstand er oppfylt. Metoden skal være en metode i en klasse, annet enn en i hovedklassen. Hovedklassen er klassen som har Main () -metoden. Navnet på Java -filen er hovedklassen. En statisk metode i hovedklassen kan fremdeles gjøres rekursiv, men den vil ikke bli adressert i denne artikkelen. Denne artikkelen forklarer rekursjon i Java, med tre gode eksempler.

Teller heltall fra null

Vurder en Java -fil med to klasser: en privat klasse som følger:

klasse aclass
void mthd (int nei)
System.ute.trykk (nei); System.ute.skrive ut(");
nei = nei + 1;
hvis nei < 5)
mthd (nei);

Metoden som skal ringe seg selv er, mthd (). Den har parameteren “int nei”. Metoden er i klassen, ACLASS. Denne metoden teller fra 0 til 4. Den første linjen i metoden har to utsagn. Den første skriver ut parameteren, nei. Den andre skriver ut et rom til høyre for denne parameteren trykt. Neste linje legger 1 til nei. Linjen som følger er en if-compound-uttalelse. Den har tilstanden som må oppfylles. Tilstanden som skal oppfylles er når ingen når 5. Hvis 5 ikke er nådd, "mthd (nei);" kaller seg uten at det har 1 lagt til den.

Hovedklassen for denne metoden kan være,

public class theclass
public static void main (String [] args)
int num = 0;
Aclass obj = new aclass ();
obj.mthd (num);
System.ute.println ();

Den første uttalelsen i Main () -metoden erklærer heltallet, NUM tildeler null til det. For at en metode skal kalles, skal et objekt bli instantiert fra klassen. Neste uttalelse i Main () -metoden instantierer et objekt, obj fra ACLASS. Uttalelsen etter bruker dette objektet til å kalle metoden, mthd (), og gir argumentet, num, som er 0. Dette er starten på tellingen. Den siste uttalelsen i Main () -metoden skriver ut en ny linje, etter alt resultatet er skrevet ut. Utgangen er:

0 1 2 3 4

Den rekursive metoden, Mthd (), kalles første gang fra Main () -metoden. Etter det fortsetter det å ringe seg selv, til en tilstand er oppfylt.

Denne typen telling kan gjøres for et hvilket som helst område. For å oppnå det for et hvilket som helst område, må startnummeret til området tildeles NUM. I stedet for 5 for IF-kondisjonen i metoden, skal tallet like etter at området skal skrives.

Legge til en rekke ikke-kontinuerlige gitte tall

Tenk på tallene:

10, 20, 30, 40, 50, 60

Summen av de første 4 tallene er 100. Det vil si: 10 + 20 = 30; 30 + 30 = 60; og 60 + 40 = 100. En rekursiv metode kan være å legge disse tallene til en økende sum til summen er mindre enn eller lik 100. For å legge til de første fem tallene, kan den rekursive metoden være å legge tallene til en økende sum til summen er mindre enn eller lik 150.

Strategien er å ha alle disse tallene i en matrise i hovedmetoden (). Gi deretter matrisen som et argument til den rekursive metoden. Hvis tillegg av de fire første tallene er påkrevd, så når summen når 100, bør den rekursive metoden slutte å ringe seg selv. Hvis tillegg av de første fem tallene er påkrevd, så når summen når 150, bør den rekursive metoden slutte å ringe seg selv. Hvis tillegg av de seks første tallene er påkrevd, så når summen når 210, bør den rekursive metoden slutte å kalle seg selv.

Klassen for denne rekursive metoden kan være:

klasse aclass
int sum = 0, i = 0;
void mthd (int [] arry)
sum = sum + arry [i];
i = i + 1;
hvis (sum < 100)
mthd (arry);

Dette er for å legge til de fire første tallene. Klassen har to felt, som er sum og jeg. Jeg er for å iterere gjennom matrisen, som begynner fra indeks 0. Den første uttalelsen i den rekursive metoden, mthd (), legger til neste nummer, til summen, som opprinnelig er null. Neste uttalelse øker i med 1, for neste matriseindeks for neste samtale. Uttalelsen etter er forbindelsen if-uttalelse. Tilstanden her er at summen ikke skal være over 100. Så for hver samtale at summen ikke er opptil 100 (eller over), kalles metoden igjen, og passerer det samme utvalget. I denne situasjonen er tilstanden på slutten av metodeimplementeringen.

Hoved () -klassen for dette kan være:

public class theclass
public static void main (String [] args)
int [] arr = new int [] 10, 20, 30, 40, 50, 60;
Aclass obj = new aclass ();
obj.mthd (arr);
System.ute.Println (obj.sum);

Den første uttalelsen i Main () -metoden instantierer matrisen, med elementene. Den andre uttalelsen instantierer objektet for ACLASS. Uttalelsen etter, kaller den rekursive metoden, og består arrayen som argument. Dette er den første samtalen fra den rekursive metoden. Etter det vil metoden ringe seg selv til den nødvendige summen er nådd. Den siste uttalelsen skriver ut den endelige summen. Utgangen for denne saken er 100.

Factorial

Fabrikken av 0, skrevet som 0!, er 1. Faktorene på 5, 4, 3, 2, 1 er som følger:

Faktoriell på 5 = 5 x 4 x 3 x 2 x 1 x 0! = 120
Faktoriell på 4 = 4 x 3 x 2 x 1 x 0! = 24
Faktoriell på 3 = 3 x 2 x 1 x 0! = 6
Fabrikk på 2 = 2 x 1 x 0! = 2
FAKTORIALE av 1 = 1 x 0! = 1

Et program kan skrives slik at når et nummer blir sendt til en rekursiv metode, vil den rekursive metoden endelig returnere den resulterende faktoriske. Merk at factorial kan beregnes ned til 1, i stedet for 0, og resultatet vil fortsatt være det samme.

Klassen for den rekursive metoden kan være:

klasse aclass
int mthd (int nei)
if (nei == 1)
retur 1;
ellers
return (nei * mthd (no-1));

Hele kroppen av metoden er en sammensatt if-statement. Hvis antallet hvis fabrikk er nødvendig, er 1, vil det som vil bli returnert være 1, ettersom faktorialen er 1 er 1. Hvis tallet er større enn 1, må all multiplikasjonen gjøres, fra selve tallet, og går ned med 1 enhet.

Resultatet oppnås når all multiplikasjon er gjort. Returuttrykket her er en metodeanrop. Argumentet er produktet av antallet og den rekursive metoden.

Anta at antallet hvis fabrikk er nødvendig, er 5, da vil argumentet for den første returanropet være:

5 x mthd (4)

Dette uttrykket vil være reservert i minnet, og neste samtale vil være

5 x 4 x mthd (3)

Dette uttrykket vil være reservert i minnet, og neste samtale vil være

5 x 4 x 3 x mthd (2)

Dette uttrykket vil være reservert i minnet, og neste samtale vil være

5 x 4 x 3 x 2 x mthd (1)

Nå returnerer Mthd (1) 1, på grunn av if-del-uttalelsen, "hvis (nei == 1) retur 1;", resulterer i,

5 x 4 x 3 x 2 x 1 = 120

for den endelige returverdien.

Hovedklassen for dette kan være:

public class theclass
public static void main (String [] args)
Aclass obj = new aclass ();
int ret = obj.mthd (5);
System.ute.println (ret);

Med et argument om 5 for den første samtalen, i hovedmetoden (), er den endelige returnerte verdien 120.

Konklusjon

Rekursjon i Java er kall av en metode, etter metoden, fra metoden. Denne handlingen gjentar seg til en tilstand er oppfylt.