kann jemand mir den Unterschied zwischen Rekursiv und Iterativ (explizit in Java) erklären?
Mit ist die Praxis nicht klar. Woran erkenne ich ob ein Programm iterativ ist oder Rekursiv.
Ich habe gelsen, dass iterativ meistens (oder immer?) eine Schleife hat.
Eine Rekursion spielt sich immer innerhalb einer Methode ab (oder auch übere mehrere). Das Erkennungsmerkmal ist, dass innerhalb der Methode diese sich selbst wieder aufruft, z.B. Methode doSomething(int x) hat irgendwo in ihrem Rumpf den Aufruf: doSomething(17); ... dadurch hat man die Möglichkeit quasi eine Art Schleife oder Iteration zu erzeugen.. es wird also ein Codeteil mehrfach ausgeführt... zumeist ändert sich der Parameter (die 17) für den rekursiven Aufruf immer, so dass irgendwann ein Wert erreicht wird, bei dem die Rekursion abgebrochen werden kann (Abbruchbedingung)... hat die rekursive Methode einen Rückgabewert, dann steht vor dem rekursiven Aufruf noch ein return doSomething() damit am Ende alle Ergebnisse, also alle Rückgabewerte entsprechend zusammengebaut zurückgegeben werden können...
Iterativ verzichtet auf diese rekursiven Aufrufe und man hat als Iterationsmöglichkeiten alle Arten von Schleifen: for, while, do. Allerdings können beide Möglichkeiten auch kombiniert werden, es spricht also nix dagegen innerhalb einer rekursiven Methode eine for-Schleife zu verwenden... - sprich, du musst in einem Programm nur die rekursiven Aufrufe finden, um festzustellen, ist das jetzt rekursiv oder nicht...
und zusätzlich muss man noch bedenken: rekursiv geht schiev
Iterative Funktionen berechnen etwas in einer Schleife.
Rekursive Funktionen berechnen etwas berechnen etwas durch Aufruf
von sich selbst (direkt oder über eine andere Funktion).
Standardbeispiel ist die Fakultätsfunktion:
Code:
Iterativ:
fakIter(n) := produkt(i=1, n, i);
Rekursiv:
fakRek(n) := 1 für n=0
fakRek(n) := n*fakRek(n-1) für n>0
int fakIter(int n) {
int fak = 1;
for (int i = 1; i <= n; i++)
fak := fak * i;
return fak;
}
int fakRek(int n) {
if (n==0)
return 1;
else
return n*fak(n-1);
}
das war auch nur nen lustiger Spruch aus den Anfängen meines Studiums... häufig haben gerade Anfänger ihre Probleme mit Rekursionen und stackOverflows etc. - daher der Spruch - natürlich ist der nicht in gänze ernst gemeint
Denn eigentlich: To iterate is human - to recurse is divine
Danke für eure vielen Antworten, ich glaube ich bin jetzt schon schlauer geworden was iterativ und rekursiv angeht. Schade dass einem das an der Uni nicht so ausführlich erläutert wird
Danke für eure vielen Antworten, ich glaube ich bin jetzt schon schlauer geworden was iterativ und rekursiv angeht. Schade dass einem das an der Uni nicht so ausführlich erläutert wird
Danke für eure vielen Antworten, ich glaube ich bin jetzt schon schlauer geworden was iterativ und rekursiv angeht. Schade dass einem das an der Uni nicht so ausführlich erläutert wird