Fakultätsberechnung und "Binäres Suchen" als Beispiel zum Vergleich der rekursiven und iterativen Lösung eines Problemes. Jedes Problem läßt sich sowohl iterativ, wie auch rekursiv lösen, wobei jeweils eine davon die elegantere und einfachere ist. Die Rekursion kann man sehr gut verwenden, wenn ein Teilproblem im Prinzip auch ein Gesamtproblem sein kann und damit mit der selben Funktion zu lösen ist. Das Standardbeispiel hierzu ist die Fakultätsberechnung. Denn: 5! = 5 * {4! = 4 * [3! = 3 * (2! = 2 * 1)]} Die Klammern deuten auf den neuen Aufruf. Es ist sicher einleuchtend, daß 5! als 5*4! zu schreiben ist. 4! stellt aber wieder das gleiche Problem dar und ist daher ganz genau so zu lösen, nämlich als 4*3!. Und so weiter. Allgemein also: n! = n * (n-1)!, gell? Wenn man nun im ersten Moment vernachlässigt, daß es sich ja um die selbe Funktion handelt, die man aufruft, ist das Problem sicher nicht mehr ganz so groß. Das wichtigste bei der Rekursion ist grundsätzlich die Abruchsbedingung. In diesem Fall ist man bei der 2 schließlich fertig, da man 2! ja kennt. Man kann auch noch einen Schritt weiter gehen und statt 2! auch 1! mit einschließen. Da 0!(=1) auch definiert ist, sollte man hier ebenfalls rücksicht drauf nehmen. Das Programm ist dem entsprechend angelegt worden. Wenn man aber auf die ein oder andere Sicherheitsabfrage (negative Werte) verzichtet, wird das Programm noch etwas kürzer. Ich persönlich empfinde die rekursive Lösung eines Problems (sofern es eine sinnvolle gibt) als ausgesprochen elegant und zudem bestechend, da keine Schleifenkonstrukte das wesentliche verkleiden. Es ist aber jedem selbst überlassen, in welchen Bahnen er lieber denkt. Der iterative Typ, der lieber alle Operationen in Schleifen baut und vor allem die Kontrolle über zu speichernde Variablen selber haben will, ist mit der Rekursion schlecht bedient. Ich kann aber nur jedem raten, sich mit beiden Algorithmen anzufreunden, denn das binäre Suchen ist stark an das durchsuchen von binären Bäumen angelehnt, was sehr schnell in einem rekursiven Algorithmus zu lösen ist. Eine vergleichbare iterative Lösung wäre sicherlich wesentlich schwieriger zu gestalten, vor allem unter der Prämisse, sortiert auszugeben...