Ich möchte hier kurz die beiden Prinzipien der iterativen und rekursiven Programmierung aufzeigen und die Möglichkeiten die beide Methoden bieten. Ich gehe davon aus, dass Sie schon das eine oder andere Programm in Java geschrieben haben und sich Hauptsächlich für den Alghorithmus bzw. die iterative- und rekursive Darstellung von Code und deren beider Vorteile interessieren. Ich werde das ganze Anhand der Fakultätsberechnung aufzeigen, welche an sich leicht zu verstehen ist.
Nun zuerst einmal, was ist ein iterativer Code bzw. eine Iteration?
Im Grunde genommen ist eine Iteration die mehrfache Ausführung einer Anweisung, also eine Schleife von denen es in Java drei Grundtypen gibt. Die abweisende, die annehmende und die Endlosschleife.
Also wäre ein iterativer Code eine Anweisung, welche so lange wiederholt wird bis sie zu einem Ergebnis kommt. Das bedeutet die Schleife braucht auf eine Abbruchbedingung, sonst würde Sie ja endlos laufen, was in den meisten Fällen nicht erwünscht ist. (Ein Fall in dem es erwünscht ist ist z.B. eine Endlos-Animation etc.).
An dem Beispiel der Fakultät, wird also der Alghorithmus solange fortgeführt bis das gewünschte Ergebnis erhalten wird.
Hier nun der passende Java-Code samt Erklärung.
Die mathematische Definition der Fakultät lautet wie folgt:
n! = 1 • 2 • 3 •...• n
wobei n! von 0 = 1 ist.
Somit lässt sich dann sehr einfach folgendes Programm entwickeln
public class FakulIter{
public static void main(String[]args){
int n=6;
long erg=1;
for(int i=2;i<=n;++i){
erg *= i;
}
System.out.println(erg);
}
}
Der große Vorteil der iterativen Programmierung ist die Ausführungsgeschwindigkeit des Programmes gegenüber der rekursiven Programmierung, jedoch lassen sich viele Programme rekursiv wesentlich eleganter Schreiben und eigentlich auch oftmals einfacher verstehen. Da es Usus geworden ist, dass die Lesbarkeit vor der Perfomanz der Programme kommt empfiehlt sich oftmals die rekursive Implementierung zu wählen.
Doch nun zur rekursiven Gestaltung der Fakultät. Dazu müssen wir eine Methode schreiben.
Hier nun das Programm, Sie können gerne die Performanz überprüfen und werden sehen das das iterative Programm schneller arbeitet.
public class FakulRekur {
static long facul(int n) {
if(n==1) return 1;
else return facul(n-1)*n;
}
public static void main(String[]args) {
System.out.println(facul(6));
}
}
Wie wir sehen ruft sich die Methode, falls n nicht 1 sein sollte wieder selbst auf und verbraucht für jeden Schritt dann wieder erneut Speicher, deswegen ist Sie auch nicht so performant.
Viel Spaß beim experimentieren!

