Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung der Iterations- und Rekursionsmethoden in Python
Wenn eine Situation auftritt, ist es notwendig, eine rekursive Operation durchzuführen, aber die Anzahl der Rekursionen ist sehr groß, mehr als 10.000 Mal. Reden wir nicht über mehr als 10.000 Rekursionen. Der ursprüngliche Testcode ist in Java. Ohne JDK und Kompilierungsumgebung verwenden wir Python
Schauen wir uns zuerst den ursprünglichen Java-Code an:
public class UpCount { private long calc(int depth) { if (depth == 0) return 1; long cc = calc(depth - 1); return cc + (depth % 7) + ((((cc ^ depth) % 4) == 0) ? 1 : 0); } public static void main(String[] args) { UpCount uc = new UpCount(); System.out.println(uc.calc(11589)); } }
Ich habe nicht viel Java gespielt, aber diese Codezeilen sind immer noch nicht stressig. Ich habe das Durcheinander schnell beseitigt und es in Python-Code geändert
def calc(depth): if depth == 0: return 1 cc = long(calc(depth-1)) xor_mod = (cc ^ depth)%4 if xor_mod == 0: return cc+(depth%7)+1 else: return cc+(depth%7) number = long(calc(11589)) print number
Stick Der Code, F5, etwas ist schief gelaufen
Diese Version des Codes fügte ursprünglich nicht lange hinzu, da die vorherige Zeichenfolge mit mehr als zehn Ziffern Ganzzahlen direkt verwendet werden kann, also Ich vermute, dass es mit long zusammenhängt.
Natürlich hat es nichts mit long zu tun. Die von Python unterstützte Ganzzahllänge ist sehr lang 🎜>
cimal = 7 original = 28679718602997181072337614380936720482949 array = "" result= "" while original !=0: remainder = original % cimal array += str(remainder) original /= cimal length = len(array) for i in xrange(0,length): result += array[length-1-i] print resultDer obige Code konvertiert eine lange Folge von Dezimalzahlen in eine hexadezimale Darstellung oder in ein beliebiges Hexadezimalsystem. Verwenden Sie dazu einfach oct() und hex() Division. Lass es uns lösen
Fehler: maximale Rekursionstiefe überschrittenAlso schnell Ich habe es überprüft und festgestellt, dass ich die maximale Anzahl von Rekursionen in Python selbst festlegen kann. Als Erweiterung können Sie auch die offizielle Website-Dokumentation überprüfen
Im Allgemeinen, um Vorteile und Abstürze zu vermeiden , die Python-Sprache fügt standardmäßig eine Begrenzung der Anzahl hinzu. Wenn ich diese Begrenzung also ändere, ist das dann in Ordnung?
import sys
#
setthe maximale Tiefe als 20000sys.setrecursionlimit(20000)
Fügen Sie den obigen Code ein und ändern Sie ihn entschieden auf 20000, aber das Ergebnis war schockierend. Ich war verwirrt
und habe nicht weiter nachgeschaut. Ich habe meinen Freund Littlehann gefragt und darüber gesprochen, mich aber nicht weiter mit diesem Thema befasst. Aber wenn es um die Effizienz rekursiver Operationen in praktischen Anwendungen geht, ist die Verwendung von Rekursionen in der Tat selten, außer in Lehrbüchern. Ich bin zwar nicht sehr beeindruckt, aber eine
for-Anweisungkann erledigt sein.
Nur ein paar Zeilen Code, alles auf einmal hat es geschafft. Als ich an das letzte Interview dachte, fragte mich der TX-Interviewer nach dem Algorithmus. Damals erwähnte er die Verwendung von Rekursion, um eine Operation zu implementieren.def calc(depth): tmp = 0 result = 1 for i in xrange(0,depth+1): cc = result if (cc ^ i)%4 == 0: tmp = 1 else: tmp = 0 result = result + (i)%7 + tmp return result final = calc(11589) print finalEs ist lange her und ich kann mich damals nicht mehr genau an die Frage erinnern, aber die heutige Lektion lautet: In den meisten Fällen (weniger Code geschrieben, Schätzung basierend auf Gefühl) rekursiv Die Effizienz ist relativ niedrig. Das wurde auch im Unterricht erwähnt
. Die Effizienz der Iteration ist offensichtlich höher als die der Rekursion (ich kann mich nicht genau an das spezifische Konzept der Iteration erinnern). Ich bin sicher, dass es bei Hunderttausenden kein Problem geben wird von Operationen, aber selbst wenn ich das Rekursionslimit ändere, ist immer noch ein Strike aufgetreten
Schließlich wird ein weiterer Link zu Python Long VS C Long Long gepostet. Wenn Sie interessiert sind, können Sie ihn sich ansehen
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Iterations- und Rekursionsmethoden in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!