Zum Inhalt springen

Diskussion:Iterative Programmierung

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 21. April 2021 um 12:41 Uhr durch Idohl (Diskussion | Beiträge) (Endrekursion). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Letzter Kommentar: vor 4 Jahren von Idohl 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
  1. http://www.ai.sri.com/pkarp/loop.html

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

Weg sowieso, denn so etwas sollte in rekursive Programmierung stehen. Es steht dort aber garnichts davon
--Idohl (Diskussion) 18:07, 20. Apr. 2021 (CEST).Beantworten
Im Artikel steht: "[Rekursion,] die dadurch (bei Endrekursion) unendlich oft ausgeführt werden könnte."
@Nomen4Omen: Die Klammern könnte man weglassen, richtig, womit im Artikel dann stehen würde "die dadurch bei Endrekursion unendlich oft ausgeführt werden könnte". Ich nehme an, dass du das so gemeint hast.
@Idohl: Zuvor stand im Artikel "[Rekursion,] die dadurch unendlich oft ausgeführt werden könnte". Eine Endlos-Rekursion ist ein Sonderfall der Rekursion, der nur extrem selten Anwendung findet, und nur bei Endrekursion funktioniert. Wenn die Aussage "unendlich oft" bleiben soll, dann muss dabei die Einschränkung 'Endrekursion' genannt werden; alternativ kann von mir aus auch der ganze Halbsatz "unendlich" weg.
Dieser extrem seltene Sonderfall der Rekursion ist eigentlich auch nur deswegen hier im Artikel nennenswert, weil Endlos-Schleifen gegelentlich vorkommen - sie sind zwar auch ein Sonderfall, aber deutlich weniger selten als eine echte, gewollte Endlosrekursion.
Ich persönlich finde die aktuelle Variante mit Klammern am besten - als Verfasser aber evtl. aus befangener Situation ;-)
--arilou (Diskussion) 09:35, 21. Apr. 2021 (CEST)Beantworten
PS: @Idohl: Der Artikel Rekursive Programmierung ist nicht perfekt, richtig. Auf Endrekursion wird nur bei "Siehe auch" verlinkt.
@Arilou: Eine Endlos-Rekursion ist ein Sonderfall der Rekursion.
Dieser Satz von Dir drückt Deine Befangenheit aus: Du gehst nicht davon aus, dass Rekursion ein prinzipiell endloser Vorgang, sondern dass ein nicht zu Ende kommendes Computer-Programm des Teufels ist.
--Idohl (Diskussion) 12:40, 21. Apr. 2021 (CEST)Beantworten