Rekursion ist - wie wir alle wissen - eines dieser Probleme - das Herumwickeln des Kopfes fühlt sich an, als würde man einen "Meilenstein" auf Ihrer Programmierreise erreichen.
Aber wenn es darum geht, es tatsächlich in Problemen der realen Welt zu verwenden - die Mechanik der Rekursion zu kennen, reicht NICHT aus -, muss man auch die Art der Probleme verstehen, bei denen die Rekursion die am besten geeignete Lösung ist.
Meine Frage ist also ...
- Was sind die "Problemmuster", die die Lösung der Rekursion erfordern?
- Ist Rekursion eine Form der "Divide & Conquer" -Strategie oder eine Form der "Code-Wiederverwendung" - oder ist es ein eigenständiges Entwurfsmuster?
- Können Sie uns ein Beispiel für ein Problem der realen Welt geben, bei dem Rekursion als sofortige Lösung in den Sinn kommt?
- UPDATE -
Viele Antworten beziehen sich auf "echte Probleme" als Baumdurchquerung, Fakultät usw. Ich würde "die WIRKLICHEN wirklichen Probleme" vorziehen - lassen Sie mich ein Beispiel geben ...
Wir hatten eine GROSSE Textmenge (ca. 30 MB Text als verknüpfte Liste structs
) und mussten einen Index für die Volltextsuche erstellen. Wir mussten den gesamten Index im Speicher behalten und den Text alle 10 Minuten neu indizieren.
Alle 10 Minuten verglichen wir den gesamten Text (zwei verknüpfte Listen, Zeile für Zeile) mit einem neu generierten Textblock - um zu sehen, welche Zeile geändert wurde - und indizierten dann nur diese Zeile neu - auf diese Weise Wir könnten vermeiden, den GESAMTEN Text neu indizieren zu müssen. Denken Sie daran - wir mussten die Diff-Punkte zwischen zwei 30-MB-verknüpften Listen finden.
Einer meiner Kollegen hat ein fantastisches Programm entwickelt, bei dem die Linien mithilfe der SCHWEREN Rekursion verglichen wurden - und dann die Positionen gesammelt wurden, an denen sich die Spannfutter in einem Array unterschieden - ja, ich weiß, es klingt rätselhaft - wie könnte die Rekursion hier helfen - aber es tat.
Der Punkt ist - wie konnte er sehen, dass dieses Problem mit starkem Einsatz von Rekursion intelligent gelöst werden konnte?