Struppi: Rekursion vs. Iteration, Mathematische vs. Listen-Operationen

Beitrag lesen

Naja. ... du hast zwei Schleifen ... zwei Mathematische Funktionen. Das halte ich für uneleganter und mit Sicherheit auch langsamer.

Wieso das denn? Computer sind auf Berechung ausgelegt, mathematische Funktionen lassen sich da wunderbar in wenig Maschinencode übersetzten und sind da also schneller als ständiges Stringsplitting, Listenmanipuliation und Typumwandlung.

Naja, Modulo ist ja eine Division die ja bekanntlich die teuersten Operationen auf einem Rechner sind, während Strings ja nichts weiter als Zeiger auf Speicherketten sind, die eigentlich recht schnell durchlaufen werden können. Aber meine Erfahrungen mit Maschinencode stammen noch aus einer Zeit, als gerade die Math Coprozessoren Standard wurden, da hat sich wohl sehr viel getan ;-)

Auch Rekursion ist oft ineffizienter als eine Schleife – bei Rekursion muss ein neuer Kontext für jeden Funktionsaufruf angelegt werden, von denen es ja nicht gerade wenig gibt. Eleganter ist Rekursion aber, ja.

Das hatte ich tasächlich verdrängt.

Ich konnte mich nicht zurückhalten, und mal alle Permutationen von Rekursion vs. Iteration und Mathematische Lösung vs. Array/String-lösung konkret auf die wiederholte Ablaufgeschwindigkeit zu testen:

Sehr schön. Mit zwei kleinen Änderungen kann man sich das auch im Browser anschauen:

Die print funktion muss implementiert werden:

function print(txt)  
{  
if(!txt) txt = '<br>';  
document.write('<pre>' + txt  +'</pre>');  
}  

und die Anzahl muss auf ca. 5000 beschränkt werden.

Gerne hätte ich noch eine Lösung mit Array.reduce gebastelt, aber in meinem Spidermonkey hatte ich nur JS 1.6 zur Verfügung.

in meinem FF gibt es die Methode leider auch noch nicht.

Klarer Gewinner: Iterativ & Mathematisch.

Tja, man kann ja nicht immer recht haben ;-)

Struppi.