27. Mai 2008 / , , , , , , / Henry / 0c

Rekursive Funktionen

Wenn mir die Programmierung von sinnlosen Anwendungen wenigstens eine Sache näher gebracht hat, dann ist das die rekursive Funktion. Eine rekursive Funktion ist ein Programmteil, der nachdem man ihn einmal aufgerufen hat, sich bis zu einer gewissen Abbruchbedingung immer wieder erneut aufruft. Das hat dann einen Vorteil, wenn man die gleichen Aktionen des übergeordneten Programmteils auf die neugeschaffenen Bedingungen der Funktion anwenden möchte.

Wir haben beispielsweise eine Funktion, die uns als Rückgabewert den Mittelpunkt einer Strecke liefert. Was ist jedoch, wenn wir einen Trennpunkt bei einem Viertel oder einem Achtel der ursprünglichen Strecke haben wollen? Wir wiederholen die Funktion auf die neuen Bedingungen solange, bis wir die entsprechende Anzahl der Mittelpunkte der Strecken erreicht haben, die wir anstreben.

Nicht immer ist das Wissen über rekursive Funktionen sinnvoll, aber heute hat es mir in Mathematik ernsthaft geholfen. Natürlich ist Mathematik in der theoretischen Form, so wie sie in der Sekundarstufe II bei uns an der Schule unterrichtet wird, natürlich auch sinnlos, aber das ist ein anderes Thema. So war nun also eine Aufgabe gegeben, in der wir gedanklich überlegen sollten, wie man aus vier Ortsvektoren, den Ortsvektor zum Mittelpunkt einer Strecke zwischen den Mittelpunkten der Strecken jeweils zweier der angegebenen Ortsvektoren ausrechnen kann. Man hat also vier Punkte im Raum. Dabei bilden die Mittelpunkte der Strecken AB und CD die neue Strecke MN, von welcher wir nun den Ortsvektor des Mittelpunktes durch Zuhilfenahme der Ortsvektoren von A, B, C und D ausrechnen sollen.

Um die Aufgabe zu lösen, muss man verstehen, dass die gleiche Funktion (“->x = ->a + r * (->b – ->a)“) mehrmals untereinander angewendet werden muss und jeweils dabei neue Ergebnisse liefert. Es mag gerade für Außenstehende etwas verrückt wirken, wenn ich mich so sehr in eine theoretische Mathematikaufgabe vertiefe, aber ich bin ein total logischer Mensch und ich mag es einfach, wenn etwas so funktioniert, wie ich es mir vorstelle. Bei der oben aufgeführten Gleichung ist “->x” der entsprechende Ortsvektor, der auf einer Geraden, die die Punkte A und B schneidet, verläuft. Es sind “->a” und “->b” die Ortsvektoren zu den Punkten A und B und “r” ist ein Parameter, der die Position auf der Geraden angibt.

Um jetzt den Ortsvektor des Mittelpunktes der Strecke A und B auszurechnen, muss man “r” die Zahl “0,5″ zuweisen. Diese “0,5″ geben an, wie viel Mal der Vektor von A zu B zum Ortsvektor von A hinzuaddiert werden soll. Wenn also “r = 1″, dann erhält man den Ortsvektor von B, da wir uns mit der Spitze des Vektors nun an B befinden. Um die doppelte Entfernung von A zu B zu erreichen, setzt man “r = 2″. Wir erhalten nun den Ortsvektor für M (Mittelpunkt der Strecke A zu B), wenn wir “->x” der Gleichung ausrechnen beziehungsweise durch die Ortsvektoren von A und B ersetzen:

->m = ->x = ->a + 0,5 (->b – ->a)

Das Gleiche gilt auch für den Ortsvektor von N:

->n = ->x = ->c + 0,5 (->d – ->c)

Nun hat man die beiden Ortsvektoren für M und N und soll nun mit diesen den Ortsvektor (->k) für den Mittelpunkt der Strecke von M zu N darstellen.

->k = ->m + 0,5 (->n – ->m)

Jetzt muss man nur noch “->m” und “->n” ersetzen und die gesamte Gleichung ausklammern:

->k = (->a + 0,5 (->b – ->a)) + 0,5[1] – (->a + 0,5 (->b – ->a)))

->k = ->a + 0,5->b – 0,5->a + 0,5->c + 0,25->d – 0,25->c – 0,5->a – 0,25->b + 0,25->a

->k = (->a – 0,5->a – 0,5->a + 0,25->a) + (0,5->b – 0,25->b) + (0,5->c – 0,25->c) + (0,25->d)

->k = 0,25->a + 0,25->b + 0,25->c + 0,25->d

Man hat nun den Ortsvektor von K von den vier Ortsvektoren von A, B, C und D mit Hilfe einer rekursiven Funktion abhängig gemacht und damit die Aufgabe gelöst. Tja, je mehr man programmiert, desto mehr hat man Spaß hat man auch bei den einfachsten Kleinigkeiten des Alltages.

  1. ->c + 0,5 (->d – ->c []