Diskussion:Iterative Programmierung

Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 20. April 2021 um 14:48 Uhr durch Nomen4Omen (Diskussion | Beiträge) (Neuer Abschnitt Endrekursion). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Letzter Kommentar: vor 4 Jahren von Nomen4Omen in Abschnitt Endrekursion

Hallo zusammen, der englische Link passt nicht zu diesem Artikel. Da würde schon eher der kleinere Absatz aus der Iteration passen. --Erkan Yilmaz 19:27, 17. Dez. 2006 (CET)Beantworten

Rekursionen

Ich bin mir nicht ganz sicher, aber ich glaube ALLE Rekursionen lassen sich auch iterativ implementieren. --Melkom 11:23, 21. Aug 2003 (CEST)

Ich bin auch der Meinung. Da ich mir nicht 100%ig sicher war, habe ich es vorsichtig formuliert. Allerdings ist es faktisch alsch, dass die iterative Lösung langsamer wäre, sie ist nur umständlicher zu implementieren, und die Rekursion ist intuitiv leichter zu verstehen. Ich hoffe das kommt jetzt so rüber, ansonsten noch mal umformulieren. -- Dishayloo 13:44, 21. Aug 2003 (CEST)
Ja stimmt, so ist das richtig. Ich hab da wohl was verwechselt. --Melkom 14:25, 21. Aug 2003 (CEST)
Ja, WHILE-Sprachen und mü-rekursive Funktionen sind äquivalent. -- JensMueller 02:00, 2. Jan 2004 (CET)

Ich halte es nicht für sehr sinnvoll, den Begriff sofort im ersten Satz (noch vor der Definition) durch Abgrenzung von Rekursion zu erklären.

Mir erschließt sich auch nicht ganz, was an iterativer Programmierung einfacher sein soll. NPOV ist das IMO nicht mehr. --JensMueller 02:01, 2. Jan 2004 (CET)

Unzulässige Begriffsverkürzung

"Iterative Programmierung" ist nicht gleichbedeutend mit "Schleifen statt Rekursion".
Der "Hauptkonkurrent" mag rekursive Programmierung sein, daher kann das als Hauptaspekt für die Abgrenzung der iterativen Programmierung herhalten - er ist aber nicht das einzige andere Konzept.

Die Gegenstücke zu iterativer Programmierung sind vor allem

  • funktionale/listenbasierte Programmierung (z.B. Sprachen wie Lisp, Scheme, Haskell);
  • logikbasierte Sprachen (da fällt mir nur Prolog ein) ~ und diese müssen anders abgegrenzt werden als über Rekursion.

--arilou (Diskussion) 08:55, 5. Sep. 2019 (CEST)Beantworten

Ist gut! --Nomen4Omen (Diskussion) 11:35, 5. Sep. 2019 (CEST)Beantworten
In der rein funktionalen Programmierung findet ja Wiederholung durch Rekursion statt, daher wäre die Abgrenzung begründbar. Bei der rein logikbasierten Programmierung handelt es sich ja lediglich um eine deklarative Datenbank für Aussagen, die mit Backtracking ausgewertet wird. Ich weiß nicht, inwieweit das ein Gegenstück sein soll, da die logische Auswertung ja nicht von Iteration oder Rekursion losgelöst ist... --Diaspomod (Diskussion) 02:42, 12. Okt. 2019 (CEST)Beantworten
Ich glaube, Diaspomod hat Recht. Die Unterscheidung rekursiv vs iterativ ist auf wesentlich niedrigerer Ebene (viel näher an der Maschineninstruktion, an der Realisierung auf heutigen Computern) als funktional vs deklarativ. Ich halte für möglich, dass sich letztere sowohl rekursiv wie iterativ implementieren lassen. Ganz vergessen wurde in diesem Kontext die »AI«, whatever that is. --Nomen4Omen (Diskussion) 09:29, 12. Okt. 2019 (CEST)Beantworten
Soweit ich das sehe, ist die Unterscheidung "funktional vs. iterativ" voll auf Hochsprachen-Ebene;
Diaspomod zeige mir in einem Prolog-Programm, wo genau da der Programmierer entweder eine Rekursion oder eine Schleife programmiert.
--arilou (Diskussion) 12:18, 23. Okt. 2019 (CEST)Beantworten
in Prolog:
recursion(Counter, End) :-
    Counter =< End,
    write('Hello, world!'),
    Next is Counter + 1,
    recursion(Next, End).
die gleiche Semantik in C:
#include <stdio.h>

void recursion(int counter, int end) {
    if (counter <= end)
        puts("Hello, world!");

    recursion(counter + 1, end);
}
Wie möchtest du die logische von der funktionalen Programmierung abgrenzen? Ich habe ja nirgendwo ausgeschlossen, dass man das könnte...--Diaspomod (Diskussion) 17:12, 3. Nov. 2019 (CET)Beantworten

Dann musst du nur noch den Unterschied zwischen funktionaler vs deskriptiver vs maschinennaher Programmiersprache und funktionalem vs rekursivem vs prozeduralem vs iterativem Programmierstil herausarbeiten. --Nomen4Omen (Diskussion) 12:49, 23. Okt. 2019 (CEST)Beantworten

Nun, wie Diaspomod gerade gezeigt hat, kann man in der logikbasierten Sprache Prolog durchaus in rekursivem Stil programmieren. Common Lisp hat das loop-Makro[1], das iterative Problemlösungen erlaubt; und in z.B. C kann man sich im Wesentlichen frei aussuchen, ob man ein Problem lieber rekursiv oder iterativ lösen will.
Iterative Programmierung kann also durchaus stattfinden in einer (weitgehend) funktionalen Sprache.
Ich finde, es muss unterschieden werden zwischen "welches Konzept wird von einer Sprache (stark) begünstigt?" vs. "welches Konzept hat der Programmierer angewendet?" - das muss nämlich nicht deckungsgleich sein.
--arilou (Diskussion) 14:32, 7. Nov. 2019 (CET)Beantworten
In Prolog ist die Rekursion keine funktionale Erweiterung, sondern inhärenter Bestandteil. Ohne rekursive Defintionen könnte man keine symmetrischen Relationen definieren wie:
f(X, Y) := f(Y, X).
Ohne die Möglichkeit der Wiederholung durch rekursive Regeln wäre Prolog nicht turingvollständig und wäre wie HTML überhaupt keine Programmiersprache.
Das abstrakte Konzept der Rekursion ist die der funktionalen oder logischen Programmierung (Sprache/Stil) übergeordnet.
Außderdem unterstützen die populären Sprachen meistens sowohl das iterative, als auch rekursive Konzept. Das heißt nicht, dass die Konzepte voneinander nicht zu unterscheiden wären.
Common Lisp ist auch nicht rein funktional, da es Seiteneffekte zulässt. --Diaspomod (Diskussion) 19:02, 8. Nov. 2019 (CET)Beantworten

Endrekursion

Die Klammer "(bei Endrekursion)" muss mE weg, da der Selbstaufruf eine Abbruchbedingung auch dann braucht, wenn in der Prozedur nach ihm noch irgendwas gemacht wird. –Nomen4Omen (Diskussion) 14:48, 20. Apr. 2021 (CEST)Beantworten

  1. http://www.ai.sri.com/pkarp/loop.html