Ich habe also im Leerlauf mit Rekursion herumgespielt, und mir ist aufgefallen, dass eine Rekursionsschleife viel langsamer ist als eine normale While-Schleife, und ich frage mich, ob jemand wüsste warum. Ich habe die Tests eingeschlossen, die ich unten gemacht habe:
%Vor% Während des letzten Tests habe ich jedoch festgestellt, dass, wenn ich die else
-Anweisung weggenommen habe, eine leichte Verbesserung der Geschwindigkeit gezeigt hat, also frage ich mich, ob die if-Anweisung die Ursache für diese Geschwindigkeitsdifferenz ist?
Sie haben Ihre Funktion als tail recursive geschrieben. In vielen imperativen und funktionalen Sprachen würde dies die Eliminierung der Tail-Rekursion auslösen, wobei der Compiler die CALL / RETURN-Befehlsfolge durch einen einfachen JUMP ersetzt, was den Prozess mehr oder weniger zur Iteration macht, im Gegensatz zur normalen Stapelrahmenzuordnung Overhead von rekursiven Funktionsaufrufen. Python verwendet jedoch keine Tail Recursion Elimination, wie in einigen dieser Links erklärt:
Wie Sie aus den Links sehen können, gibt es Gründe dafür, dass es nicht standardmäßig existiert, und Sie können es auf verschiedene Arten hacken, aber standardmäßig preist Python mithilfe von Generatorfunktionen komplizierte Sequenzen von Anweisungen, gegen die Rekursion.
Rekursion ist im Vergleich zur Iteration (im Allgemeinen) ziemlich teuer, weil sie die Zuweisung eines neuen Stapelrahmens erfordert.
Tags und Links python performance python-2.7 recursion