Beispiele für rekursive Funktionen
Kann jemand empfehlen, Programmier-Beispiele, die veranschaulichen rekursive Funktionen? Es gibt die üblichen alten Pferde wie Fibonacci-Reihe und Türme von Hanoi, aber alles, was neben Ihnen Spaß machen würde.
Kommentar zu dem Problem
Siehe mein Kommentar auf diese Frage: stackoverflow.com/questions/126756/...
InformationsquelleAutor der Frage Codeslayer | 2008-09-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Abbildung ist in Englisch, eher als eine tatsächliche Programmiersprache, aber ist nützlich für die Erklärung des Prozesses in eine nicht-technische Art und Weise:
InformationsquelleAutor der Antwort ConroyP
Um verstehen Rekursion, muss man zunächst verstehen,Rekursion.
InformationsquelleAutor der Antwort Ilya Ryzhenkov
Die Faustregel für Rekursion "Rekursion, wenn und nur wenn für jede iteration Ihre Aufgabe teilt sich in zwei oder mehr ähnliche Aufgaben".
Also Fibonacci ist kein gutes Beispiel für Rekursion Anwendung, während Hanoi ist ein guter.
So dass die meisten der guten Beispiele für die Rekursion sind Baum-traversal in verschiedenen verbirgt.
Zum Beispiel:
graph-traversal - die Anforderung, dass besuchte Knoten werden nie wieder besucht effektiv macht graph ein Baum (ein Baum ist ein zusammenhš angender graph ohne einfache Zyklen)
Teile und herrsche-algorithmen (quick sort, merge sort) - Teile, die nach "Teile" bilden die Kinder-Knoten, "erobern" - Systeme bildet die Kanten von Elternknoten zu Kind-Knoten.
InformationsquelleAutor der Antwort Kaerber
Wie zum testen ein string ein Palindrom?
Natürlich, Sie könnten dies mit einer Schleife effizienter zu gestalten.
InformationsquelleAutor der Antwort Kip
Schreiben Sie eine recursive-descent-parser!
InformationsquelleAutor der Antwort Martin Cote
Noch ein paar der "üblichen-verdächtigen" sind Quicksort und MergeSort
InformationsquelleAutor der Antwort agnul
Aus der Welt der Mathematik, es ist die Ackermann-Funktion:
Es immer endet, aber es erzeugt sehr große Ergebnisse auch für sehr kleine Eingänge. Ackermann(4, 2), zum Beispiel, gibt 265536 − 3.
InformationsquelleAutor der Antwort Kip
Den interpreter design pattern ist ein ganz gutes Beispiel, weil viele Menschen Sie nicht vor Ort die Rekursion. Der Beispiel-code aufgeführt, der Wikipedia-Artikel verdeutlicht auch, wie diese angewendet werden können. Aber einen viel grundlegenderen Ansatz, der noch implementiert das interpreter-Muster ist eine
ToString
Funktion für verschachtelte Listen:(Ja, ich weiß, es ist nicht leicht zu erkennen das interpreter-Muster in den oben genannten code, wenn Sie erwarten, dass eine Funktion namens
Eval
... aber wirklich, das interpreter-Muster sagt uns nicht, was die Funktion namens oder sogar, was es tut und das GoF Buch explizit listet die oben als ein Beispiel, sagte Muster.)InformationsquelleAutor der Antwort Konrad Rudolph
Meiner Meinung nach, Rekursion ist gut zu wissen, aber die meisten Lösungen verwenden Sie Rekursion könnte auch getan werden, mittels iteration, und die iteration ist bei weitem effizienter.
Das heißt hier ist eine rekursive Art und Weise zu finden, ein Steuerelement in einem verschachtelten Struktur (wie ASP.NET oder Winforms):
InformationsquelleAutor der Antwort FlySwat
Hier ist ein pragmatisches Beispiel aus der Welt der Dateisysteme. Dieses Dienstprogramm rekursiv zählt Dateien unter einem angegebenen directory. (Ich weiß nicht warum, aber ich hatte tatsächlich einen Bedarf für so etwas lange her...)
(Beachten Sie, dass in Java eine
File
Instanz darstellen kann entweder eine normale Datei oder ein Verzeichnis. Dieses Dienstprogramm schließt Verzeichnisse aus, die zählen.)Einer gemeinsamen real-world-Beispiel wäre z.B.
FileUtils.deleteDirectory()
von der Commons-IO Bibliothek; siehe API-doc & Quelle.InformationsquelleAutor der Antwort Jonik
Einem real-world-Beispiel ist der "bill-of-Material costing" - problem.
Nehmen wir an, wir haben ein produzierendes Unternehmen, das macht das Endprodukt aus. Jedes Produkt ist beschreibbar durch eine Liste der Teile und die Zeit, die erforderlich ist, montieren Sie diese Teile. Zum Beispiel fertigen wir hand-Bohrmaschinen von einem Fall, motor, Bohrfutter, Schalter, und Kabel, und es dauert nur 5 Minuten.
Gegeben eine standard-Lohnkosten pro minute, wie viel kostet die Herstellung jedes unserer Produkte?
Oh, by the way, einige Teile (z.B. Kabel) gekauft werden, damit wir wissen, Ihre Kosten direkt.
Aber wir tatsächlich produzieren einige der Teile selbst. Wir machen einen motor aus einem Gehäuse, einem stator, ein rotor, eine Welle und Lager, und es dauert 15 Minuten.
Und wir machen stator und rotor aus Stanzteilen und Draht, ...
So, der Bestimmung der Kosten des Endprodukts beträgt tatsächlich zu traversieren der Struktur, die repräsentiert alle ganzen-zur-Liste-der-Teile-Beziehungen werden in unseren Prozessen. Das ist schön ausgedrückt mit einem rekursiven Algorithmus. Es kann sicherlich getan werden iterativ so gut, aber die Kern-Idee bekommt, gemischt mit der do-it-yourself-Buchführung, so ist es nicht so klar, was Los ist.
InformationsquelleAutor der Antwort joel.neely
Die hairiest Beispiel, das ich kenne, ist Knuth ' s Mann oder Boy Test.
Sowie Rekursion es nutzt die Algol-features von verschachtelten Funktionsdefinitionen (Verschlüsse), Funktion, Referenzen und Konstanten - /Funktions-Dualismus (call-by-name).
InformationsquelleAutor der Antwort Hugh Allen
Wie andere schon gesagt haben, eine Menge von kanonischen Rekursion Beispiele sind Akademische.
Einige praktische Anwendungen, die ich 've festgestellt, die in der Vergangenheit:
1 - Navigation in einer Baumstruktur, wie ein Dateisystem oder in der Registrierung
2 - Manipulation container-Steuerelemente enthalten können andere container-Steuerelemente (wie Platten oder GroupBoxes)
InformationsquelleAutor der Antwort JosephStyons
Mein persönlicher Favorit ist Binäre Suche
Edit: Außerdem, Baum-traversal. Fuß nach unten in einen Ordner-Datei-Struktur zum Beispiel.
InformationsquelleAutor der Antwort Geoff
Implementierung Von Graphen , die von Guido van Rossum hat einige rekursive Funktionen in Python zu finden, die Pfade zwischen zwei Knoten im Graphen.
InformationsquelleAutor der Antwort sanxiyn
Mein Lieblings-Art, Merge-Sort
(Favorit seit ich denken kann, ist der Algorithmus und ist es nicht schade performance-wise)
InformationsquelleAutor der Antwort crashmstr
InformationsquelleAutor der Antwort Vinko Vrsalovic
Wie etwa das umkehren eines Strings?
Verständnis dieses hilft, zu verstehen Rekursion.
InformationsquelleAutor der Antwort Yuval F
Hier ist eine Probe, die ich auf dieser Website veröffentlicht eine Weile zurück, für die rekursiv erzeugen Sie ein Menü-Baum: Rekursives Beispiel
InformationsquelleAutor der Antwort JPrescottSanders
Wie über alles Verarbeitung von Listen, wie:
InformationsquelleAutor der Antwort pkaeding
Once upon a time, nicht so lange her, Kinder der Grundschule gelernt Rekursion mit Logo und Turtle-Grafik. http://en.wikipedia.org/wiki/Turtle_graphics
Rekursion ist auch ideal für das lösen von Rätseln durch erschöpfende Studie. Es ist eine Art von puzzle aufgerufen, ein "fill in" (Google es), in dem Sie bekommen ein Gitter wie ein Kreuzworträtsel, und die Worte, aber keine konkreten Hinweise, keine nummerierten Plätze. Ich schrieb mal ein Programm unter Verwendung von Rekursion für ein puzzle publisher das Rätsel zu lösen, um sicher sein, dass die Lösung bekannt ist, war einzigartig.
InformationsquelleAutor der Antwort SeaDrive
Rekursive Funktionen sind ideal für arbeiten mit rekursiv definierte Datentypen:
Etc.
InformationsquelleAutor der Antwort Bruno De Fraine
Übersetzen-spreadsheet-Spalte index auf eine Spalte name.
Es ist schwieriger als es klingt, da spreadsheet-Spalten nicht behandeln, '0' Ziffer richtig. Zum Beispiel, wenn Sie nehmen A-Z als Ziffern, wenn Sie die Inkrement von Z, AA, es wäre wie von 9 auf 11 oder 9, 00 statt um 10 (je nachdem, ob Eine 1 oder 0). Auch die Microsoft-Support-Beispiel bekommt es falsch, für alles, was höher als AAA!
Die rekursive Lösung funktioniert, da kann man recurse Recht auf diejenigen, die neu-stellige boundries. Diese Implementierung ist in VB.Net und behandelt die erste Spalte ('A') index 1.
InformationsquelleAutor der Antwort Joel Coehoorn