Recursie |
Nogmaal de faculteit, maar nu met recursie. Recursie is het aanroepen van dezelfde methode binnen de eigen methode definitie.
Dit programma berekent de faculteit van een long integer m.b.v. recursie
/*Programma berekent de faculteit m.b.v. recursie
en drukt van een ingetypt getal af */
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class FaculteitRecursief extends Applet implements ActionListener{
Label vraag;
TextField invoerVeld;
long getal;
public void init() {
vraag = new Label( "Type het getal in en druk op Enter " );
invoerVeld = new TextField( 10 );
add( vraag );
add( invoerVeld );
invoerVeld.addActionListener(this);
}
public void actionPerformed( ActionEvent e ) {
getal= Long.parseLong(invoerVeld.getText() );
if (getal > 20 ) // te grote getallen passen niet
showStatus(" Ongeldige uitkomst");
else
showStatus(" "); // wis de voorgaande tekst
repaint();
}
public void paint( Graphics g ) {
g.drawString( getal + "! = " + faculteit(getal), 50 , 80 );
}
// de recursieve functie
// de functie faculteit roept de methode fuculteit weer aan
long faculteit( long nummer ) {
if ( nummer < 1 ) // de basis geval en stop voorwaarde
return 1;
else
return nummer * faculteit ( nummer - 1 );
}
}
|
Recursie betekent dat een functie zichzelf weer aanroept. Dit neigt tot oneindig doorgaan. Dus moet er in recursie altijd een stopvoorwaarde zijn. Hoe werkt dit? Een voorbeeld:
Resumé
Een recursieve aanroep kan altijd worden uitgevoerd met een
for-lus. Dit is vaak overzichtelijker en hierbij wordt minder
geheugen gebruikt als gevolg van de admininstratie die nodig is
bij het aanroepen van een methode.
Zie ook de for-lus versie van recursie