Python kehrt eine Zeichenkette durch Rekursion um

8

Ich möchte Rekursion verwenden, um eine Zeichenfolge in Python umzukehren, so dass die Zeichen rückwärts angezeigt werden (d. h. "Hallo" wird "olleh" / "o l l e h".

Ich habe eines geschrieben, das es iterativ macht:

%Vor%

Aber wie genau mache ich das rekursiv? Ich bin in diesem Teil verwirrt, vor allem, weil ich nicht viel mit Python und Rekursion arbeite.

Jede Hilfe wäre willkommen.

    
Eric 03.04.2011, 22:12
quelle

5 Antworten

18
%Vor%

(Sehr wenige Leute führen in Python eine rekursive Verarbeitung durch, die Sprache wurde nicht dafür entwickelt .)

    
Fred Foo 03.04.2011, 22:14
quelle
16

Um ein Problem rekursiv zu lösen, finden Sie einen trivialen Fall, der leicht zu lösen ist, und finden Sie heraus, wie Sie zu diesem trivialen Fall gelangen, indem Sie das Problem in einfachere und einfachere Versionen von sich selbst zerlegen.

Was macht man als erstes, wenn man eine Saite umkehrt? Wörtlich das Erste? Sie erhalten das letzte Zeichen der Zeichenfolge, richtig?

Also ist die Umkehrung einer Zeichenkette das letzte Zeichen, gefolgt von der Umkehrung von allem aber dem letzten Zeichen, wo die Rekursion kommt. Das letzte Zeichen einer Zeichenkette kann als geschrieben werden x[-1] während alles aber das letzte Zeichen ist x[:-1] .

Nun, wie schaffst du es? Das heißt, was ist der triviale Fall, den Sie ohne Rekursion lösen können? Eine Antwort ist die Ein-Zeichen-Zeichenfolge, die die gleiche vorwärts und rückwärts ist. Wenn Sie also eine Zeichenfolge mit einem Zeichen erhalten, sind Sie fertig.

Aber die leere Zeichenkette ist noch trivialer, und jemand könnte das tatsächlich an Ihre Funktion übergeben, also sollten wir das wahrscheinlich verwenden. Eine Ein-Zeichen-Zeichenfolge kann schließlich auch in das letzte Zeichen und alles außer dem letzten Zeichen zerlegt werden; Es ist nur so, dass alles außer dem letzten Zeichen die leere Zeichenfolge ist. Wenn wir also den leeren String behandeln, indem wir ihn einfach zurückgeben, sind wir eingestellt.

Setze alles zusammen und du bekommst:

%Vor%

Oder in einer Zeile:

%Vor%

Wie andere darauf hingewiesen haben, ist dies in Python normalerweise nicht so. Eine iterative Lösung wird schneller sein, und das Verwenden von Slicing wird noch schneller sein.

Darüber hinaus legt Python eine Begrenzung der Stapelgröße fest, und es gibt keine Optimierung für den Tail-Aufruf. Eine rekursive Lösung wäre also auf die Umkehrung von Strings mit nur etwa tausend Zeichen beschränkt. Sie können die Stack-Größe von Python erhöhen, aber es würde immer noch ein festes Limit geben, während andere Lösungen immer einen String beliebiger Länge verarbeiten können.

    
kindall 03.04.2011 22:27
quelle
3

Wenn dies nicht nur eine Hausaufgabenfrage ist und Sie tatsächlich versuchen, eine Zeichenfolge für ein größeres Ziel umzukehren, tun Sie einfach s[::-1] .

    
bradley.ayers 03.04.2011 22:13
quelle
1
%Vor%

oder

%Vor%     
Jarek Przygódzki 21.12.2012 08:13
quelle
0
%Vor%     
nEO 02.11.2015 07:06
quelle

Tags und Links