Was hat eine For-Schleife mit Rekursion zu tun?

Hallo liebe Community, ich hab da mal eine Frage und hoffe, ihr könnt mir ein wenig helfen.
Und zwar geht es darum, dass ich bald ein Referat in Informatik über die Rekursion halten muss. Aufgrund der Tatsache, dass ich in Informatik überhaupt NICHTS verstehe, hält sich meine Begeisterung also dementsprechend in Grenzen. Auf die Frage, was Rekursion ist und welche Vor/Nachteile es hat, habe ich mir die Antworten aus einigen Websites herausgeschrieben, jedoch müsste ich nun ein Beispiel erklären, das rekursiv umgesetzt wird. Als Vorgabe habe ich die For-Schleife und ich habe mal bei WIkipedia und so geschaut, doch ich kann in einer For-Schleife beim Besten Willen keine Rekursion erkennen! Was ist also das "rekursive" an einer For-Schleife?
Und habt ihr vielleicht noch ein oder zwei Beispiele, wo die Rekursion effizient und ineffizient zum Einsatz kommt?
Ich steig durch das Thema leider gar nicht durch...
Ich hoffe ihr könnt mir helfen, vielen Dank im Vorraus!
LG,
Tyrion

Bin Wech2011-01-03T04:15:07Z

Beste Antwort

Da hast du recht, eine For-Schleife hat zunächst einmal nichts mit Rekursion zu tun.
Rekursion ist, wenn ein Programm oder Unterprogramm sich selbst aufruft, das passiert dann meist in for-Schleifen, aber das ist keine zwingende Voraussetzung.
Paradebeispiel für Rekursion ist die Fakultätsberechnung.
An zweiter Stelle rangiert wahrscheinlich der Quicksort.

http://de.wikipedia.org/wiki/Quicksort

Da findest Du die Grundlagen, der Rest ist auch leicht zu ergoogeln.


@TWally:
http://de.pandapedia.com/wiki/Rekursion

Die primitive Rekursion ist ein Spezialfall der linearen Rekursion. Hier definiert man Funktionen auf den natürlichen Zahlen, wobei in jedem rekursiven Aufruf dessen erster Parameter um Eins ab- oder zunimmt. Jede primitiv-rekursive Definition kann unter Zuhilfenahme eines Stapels durch eine For-Schleife ersetzt werden. Zitatende.

Wohlgemerkt: Die for-Schleife kann die primitive Rekursion e r s e t z e n, sie selbst ist keine Rekurison. Auch in deinem Beispiel ist die for-Schleife nicht rekursiv, rekursiv ist die Funktion 'recurs' die sich selber aufruft.

?2011-01-03T13:17:41Z

Rekursion bedeutet, dass der n-te Ausführungsschritt einer Programmschleife Ergebnisse vom (n-1)-ten (oder eines anderen vorher abgearbeiteten) benötigt. (Eine Definition ist rekursiv, wenn sie Begriffe vorher gebildeter definitionen benutzt. Bsp.: "Ein Rechteck ist ein Parallelogramm mit rechten Winkeln an den Eckpunkten" Dann muss vorher das Parallelogramm definiert worden sein und der rechte Winkel.)

"Paradebeispiel für Rekursion ist die Fakultätsberechnung." Wenn die Zahl, deren Fakultät berechnet werden soll, mindestens 4 beträgt, lässt sich das programmtechnisch teilweise parallelisieren. Ich würde daher die Fakultätsberechnung nicht als Paradebeispiel hernehmen. Möglicherweise optimieren moderne Kompilierer Programmcode durch teilweise Parallelisierung, so dass der Programmierer nicht viel Effizienz verschenkt, wenn er sich nicht darum kümmert. In komplizierten Fällen schaffen es aber die Kompilierer nicht.

Ich denke, du kannst die Fakultätsberechnung im Referat gut hernehmen, um die rein rekursive berechnung mit primitivem nicht optimiertem programmcode zu erläutern. 2.) am beispiel großer zahlen die Möglichkeiten der Parallelsierung andeuten. 3.) falls du dazu etwas finden kannst, zegen, wie man die Fakultät riesger Zahlen effektiv berechnen würde.

TWally2011-01-03T12:29:51Z

-> schau mal unter primitver Rekursion. Da fällt die for-Schleife darunter (implementativ iterativ vs. implemntativ rekursiv).
Hoffentlich brennt jetzt das Birnchen etwas heller.
void iterativ(char* irgendeinstring) {
for(;*rigendeinstring !=0;irgendeinstring++)
{
dosomethin();
}
return;
}

Tippfehler sind zu entschuldigen.

void recurs(char * irgendeinstring) {

if (*irgendeinstring !=0) {
domesomethin();
recurs(++irgendeinstring);
}
else
return;
}