Universität Hamburg - Fachbereiche - Fachbereich Mathematik

Java-Kurs (10)

WiSe 01/02

Bodo Werner

Zurück zum Inhaltsverzeichnis.

10. Rekursionen

Methoden können sich selbst aufrufen, Methoden von Klassen können Objekte derselben Klasse definieren: es handelt sich um selbstbezügliche Konstruktionen. Im allgemeinen sind rekursive Programme sehr elegant, aber relativ zeitaufwendig. Ich werde dies an Hand von vier Beispielen sehr kurz erkäutern.

10.1 Fakultät n!

Basierend auf n! = n*(n-1)!, 0!=1 kann die folgende Methode implementiert werden:

 long Fak(long n){
	if (n==0) return 1;
	else return n*Fak(n-1);
    }//Ende Fak

10.2 Fibonacci-Zahlen

Es gilt die Rekursion f(n)=f(n-1)+f(n-2), f(0)=0, f(1)=1. Dies kann direkt in eine Java-Methode übertragen werden:

 long Fibonacci(int n){
	if (n<=1) return n;
	else return Fibonacci(n-1)+Fibonacci(n-2);
 }

10.3 Turm von Hanoi


   void Hanoi(int n, String a, String b, String c){
	//uebertraegt n Scheiben von a nach b mit Hilfe von c
	if (n>0){ 
            Hanoi(n-1,a,c,b);
            System.out.println("Scheibe von "+a+" nach "+b);
	    Hanoi(n-1, c, b, a);
	}//Ende if
    }//Ende Hanoi()

 

10.4 n-te Ableitung einer Funktion

Beruhend auf der Definition, dass die n-te Ableitung einer Funktion die erste Ableitung der (n-1)-ten Ableitung dieser Funktion ist, kann man die Methode getAbleitung() in der Klasse Funktion5 ausnutzen:

class Ableitung extends Funktion5{
    Funktion5 f;
    int n;
    Ableitung(Funktion5 f, double a, double b,int n){
        super(a,b);
	this.f=f;
	this.n=n;
    }
       
    double getY(double x){
	if (n==1) return f.getAbleitung(x);
	else {
	    Ableitung g=new Ableitung(f,f.xMin,f.xMax,n-1);
            return g.getAbleitung(x);
	}//Ende else
    }//Ende getY()
}//Ende class Ableitung

Hier wird im Methodenblock von getY() ein Objekt genau der Klasse konstruiert, zu der die Methode getY() gehört. Ferner beachte man, dass getAbleitung() in Funktion5 von getY() Gebrauch macht, so dass dadurch auch die Methode getY() in der Klasse Ableitung sich selbst aufruft.

Ende des Kurses!!