Tässä opetusohjelmassa opit Java-rekursiivisesta toiminnosta, sen eduista ja haitoista.
Java-tilassa itseään kutsuva menetelmä tunnetaan rekursiivisena menetelmänä. Ja tämä prosessi tunnetaan rekursiona.
Fyysisen maailman esimerkki olisi sijoittaa kaksi rinnakkaista peiliä vastakkain. Mikä tahansa niiden välissä oleva esine heijastuu rekursiivisesti.
Kuinka rekursio toimii?

Yllä olevassa esimerkissä olemme kutsuneet recurse()
menetelmää menetelmän sisältä main
. (normaali menetelmäpuhelu). Recurse () -menetelmän sisällä kutsumme taas samaa recurse-menetelmää. Tämä on rekursiivinen puhelu.
Rekursiivisen puhelun lopettamiseksi meidän on annettava joitain ehtoja menetelmän sisällä. Muuten menetelmää kutsutaan loputtomasti.
Siksi käytämme if … else -lausetta (tai vastaavaa lähestymistapaa) rekursiivisen puhelun lopettamiseksi menetelmän sisällä.
Esimerkki: Rekursiota käyttävän luvun kerroin
class Factorial ( static int factorial( int n ) ( if (n != 0) // termination condition return n * factorial(n-1); // recursive call else return 1; ) public static void main(String() args) ( int number = 4, result; result = factorial(number); System.out.println(number + " factorial = " + result); ) )
Tuotos :
4 kerroin = 24
Yllä olevassa esimerkissä meillä on menetelmä nimeltä factorial()
. Tätä factorial()
kutsutaan main()
menetelmästä. argumenttina välitetyn numeromuuttujan kanssa.
Täällä huomaa lausunto,
return n * factorial(n-1);
factorial()
Menetelmä kutsuu itseään. Aluksi n: n arvo on 4 sisällä factorial()
. Seuraavan rekursiivisen puhelun aikana 3 siirretään factorial()
menetelmään. Tätä prosessia jatketaan, kunnes n on yhtä suuri kuin 0.
Kun n on yhtä suuri kuin 0, if
käsky palauttaa epätosi, joten 1 palautetaan. Lopuksi kertynyt tulos välitetään main()
menetelmälle.
Factorial-ohjelman työskentely
Alla oleva kuva antaa sinulle paremman käsityksen siitä, kuinka tekijäohjelma suoritetaan rekursiota käyttämällä.

Rekursioiden edut ja haitat
Kun rekursiivinen puhelu soitetaan, pinolle varataan uudet muuttujien tallennuspaikat. Kun jokainen rekursiivinen puhelu palaa, vanhat muuttujat ja parametrit poistetaan pinosta. Siksi rekursio kuluttaa yleensä enemmän muistia ja on yleensä hidasta.
Toisaalta rekursiivinen ratkaisu on paljon yksinkertaisempi ja vie vähemmän aikaa kirjoittamiseen, virheenkorjaukseen ja ylläpitoon.
Suositeltavaa lukua: Mitkä ovat rekursioiden edut ja haitat?