Ich weiß, es ist nicht eine hilfreiche Antwort (obwohl diese Frage wurde schon beantwortet), aber im eigentlichen code, bitte tun Sie das nicht. Python kann nicht optimieren tail-fordert, hat langsame Funktionsaufrufe und hat eine Feste Rekursionstiefe, also es gibt mindestens 3 Gründe, warum es zu tun iterativ statt.
Nicht zu Stimme mit Ihnen auf die Substanz "bitte tun Sie das nicht im echten code". In diesem speziellen Fall, spielt es keine Rolle, dass Python nicht optimiert Schwanz Anrufe, weil Liste reversion ist nicht tail-rekursiv, ohne CPS.
Verwenden Sie die Divide & conquer-Strategie. D&C-algorithmen, rekursive algorithmen.
Um dieses problem zu lösen Sie mithilfe der D&C, gibt es zwei Schritte:
Herauszufinden, die base-case. Dies sollte der einfachste mögliche Fall.
Teilen oder verringern Sie Ihr problem, bis es dann in die Basis Fall.
Schritt 1: herausfinden der base case. Was ist die einfachste Liste könnte man
bekommen? Wenn Sie eine Liste mit 0 oder 1 element, das ist ziemlich einfach zu summieren.
if len(l)==0:#base casereturn[]
Schritt 2: Sie brauchen, um eine Annäherung an eine leere Liste mit jedem rekursiven
rufen Sie
recursive(l)#recursion case
beispielsweise
l =[1,2,4,6]def recursive(l):if len(l)==0:return[]# base caseelse:return[l.pop()]+ recursive(l)# recusrive caseprint recursive(l)>[6,4,2,1]
Dieser umkehren wird, eine verschachtelte Listen auch!
A =[1,2,[31,32],4,[51,[521,[12,25,[4,78,45],456,[444,111]],522],53],6]def reverseList(L):# Empty listif len(L)==0:return# List with one elementif len(L)==1:# Check if that's a listif isinstance(L[0], list):return[reverseList(L[0])]else:return L
# List has more elementselse:# Get the reversed version of first list as well as the first elementreturn reverseList(L[1:])+ reverseList(L[:1])print A
print reverseList(A)
Anfügen, das erste element der Liste, um eine umgekehrte Teilliste:
Etwas expliziter:
Dieser verwandelt sich in:
Welches sich in:
Das ist das gleiche wie eine andere Antwort.
Tail recursive /CPS-Stil (der python nicht optimieren für eh):
Ich weiß, es ist nicht eine hilfreiche Antwort (obwohl diese Frage wurde schon beantwortet), aber im eigentlichen code, bitte tun Sie das nicht. Python kann nicht optimieren tail-fordert, hat langsame Funktionsaufrufe und hat eine Feste Rekursionstiefe, also es gibt mindestens 3 Gründe, warum es zu tun iterativ statt.
Der trick ist, sich nach recursing:
Verwenden Sie die Divide & conquer-Strategie. D&C-algorithmen, rekursive algorithmen.
Um dieses problem zu lösen Sie mithilfe der D&C, gibt es zwei Schritte:
Schritt 1: herausfinden der base case. Was ist die einfachste Liste könnte man
bekommen? Wenn Sie eine Liste mit 0 oder 1 element, das ist ziemlich einfach zu summieren.
Schritt 2: Sie brauchen, um eine Annäherung an eine leere Liste mit jedem rekursiven
rufen Sie
beispielsweise
Quelle : Grokking Algorithmen
Dieser eine kehrt im Ort. (Natürlich eine iterative version wäre besser, aber es muss rekursiv sein, hat es nicht?)
sieht einfacher:
Nehmen Sie das erste element, kehren Sie den rest der Liste rekursiv, und fügen Sie das erste element am Ende der Liste.
drucken reverseList([1,2,3,4])
[4,3,2,1]
Verwendung von Änderbaren Standard-argument und die Rekursion :
zusätzliche info
Rekursion Teil ist
hello(x[:-1])
wo seine Berufung hello-Funktion erneut nachx[:-1]
Warum nicht:
Dieser umkehren wird, eine verschachtelte Listen auch!
Padmal s BLOG