Yahoo Clever wird am 4. Mai 2021 (Eastern Time, Zeitzone US-Ostküste) eingestellt. Ab dem 20. April 2021 (Eastern Time) ist die Website von Yahoo Clever nur noch im reinen Lesemodus verfügbar. Andere Yahoo Produkte oder Dienste oder Ihr Yahoo Account sind von diesen Änderungen nicht betroffen. Auf dieser Hilfeseite finden Sie weitere Informationen zur Einstellung von Yahoo Clever und dazu, wie Sie Ihre Daten herunterladen.

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

3 Antworten

Bewertung
  • vor 1 Jahrzehnt
    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.

  • carla
    Lv 6
    vor 1 Jahrzehnt

    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.

  • TWally
    Lv 6
    vor 1 Jahrzehnt

    -> 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;

    }

Haben Sie noch Fragen? Jetzt beantworten lassen.