[PYTHON] So erstellen Sie eine rekursive Funktion

Es ist schwierig, eine rekursive Funktion zu erstellen

Es ist schwierig, eine rekursive Funktion zu erstellen, nicht wahr? Es gibt viele Kommentarartikel zu rekursiven Funktionen, aber es scheint, dass es nur wenige Artikel gibt, die erklären, wie rekursive Funktionen erstellt werden, und nur den Code der bereits vorhandenen rekursiven Funktionen erläutern. ..

Wenn Sie den Artikel zum Erstellen einer rekursiven Funktion untersuchen, zeigt englischer Artikel hier den Ablauf des Erstellens einer rekursiven Funktion. Ich habe es leicht verständlich erklärt. Ich habe versucht, den Inhalt des englischen Artikels selbst zu übersetzen, daher möchte ich ihn gerne teilen.

1. Was ist eine rekursive Funktion?

Kurz gesagt, eine Funktion, die einen eigenen Aufruf enthält. Einzelheiten finden Sie in anderen Artikeln.

2. Zwei Funktionen, die eine rekursive Funktion bilden

Lassen Sie uns zunächst die Funktionen verstehen, aus denen eine rekursive Funktion besteht. Zum Erstellen einer rekursiven Funktion sind zwei Funktionen erforderlich:

  1. ** Stoppfunktion **: Teil der eigenen Funktion
  2. ** Rekursive Funktion **: Der Teil, in dem sich die Funktion selbst aufruft

Betrachten Sie beispielsweise eine rekursive Funktion, die eine Zeichenfolge invertiert. Teilen wir es in die beiden oben genannten Funktionen ein:

def reverse_string(str1):
    #Stoppfunktion
    if len(str1)<2:
        return str1

    #Rekursive Funktion
    return reverse_string(str1[1:])+str1[0]

Ich denke, es ist relativ einfach, den Teil der Stoppfunktion in Code umzuwandeln. Andererseits kann es schwierig sein, rekursive Features in Code umzuwandeln. Daher werde ich den Ablauf der Konvertierung dieser rekursiven Funktion in Code erläutern.

3. Ablauf der Konvertierung rekursiver Funktionen in Code

Konvertieren Sie rekursive Funktionen mit dem folgenden Ablauf in Code:

  1. Bestimmen Sie das zu lösende Problem </ font> mit einer rekursiven Funktion.
  2. Betrachten Sie das einfache Problem in einem Schritt </ font> aus als Problem </ font>.
  3. Ein einfaches Problem in einem Schritt </ font> kann durch die Funktion gelöst werden, die ich machen werde ** Ich glaube von ganzem Herzen **! Ab 4.3 können Sie das einfache Problem in einem Schritt </ font> lösen (ich glaube von ganzem Herzen). Lassen Sie die Lösung sol1 sein.
  4. Verwenden Sie sol1, um die Lösung (nennen wir es sol) des zu lösenden -Problems auszudrücken </ font>.

Wenn Problemlösung </ font> ein Problem im Zusammenhang mit n Problemen ist, ist ein einstufiges einfaches Problem </ font> ein Bild eines Problems im Zusammenhang mit n-1 Problemen. .. Ich werde die Bedeutung der Erklärung in der Präambel konkret anhand des Beispiels in Kapitel 5 zeigen.

4. Flow, um eine rekursive Funktion zu erstellen

In Kapitel 3 haben wir einen Flow erstellt, der rekursive Funktionen in Code konvertiert. Lassen Sie uns nun die Flüsse zusammenfassen, aus denen die rekursive Funktion besteht.

  1. Erstellen Sie einen rekursiven Funktionsnamen
  2. Konvertieren Sie die Stoppfunktion in Code
  3. Konvertieren Sie rekursive Funktionen in Code
  4. Bestimmen Sie das zu lösende Problem </ font> mit einer rekursiven Funktion.
  5. Betrachten Sie das einfache Problem in einem Schritt </ font> aus als Problem </ font>.
  6. Ein einfaches Problem in einem Schritt </ font> kann durch die Funktion gelöst werden, die ich machen werde ** Ich glaube von ganzem Herzen **! Nennen wir die Funktion Spaß.
  7. Sie können das einfache Problem in einem Schritt </ font> aus Spaß lösen. Lassen Sie die Lösung sol1 sein.
  8. Verwenden Sie sol1, um die Lösung (nennen wir es sol) des zu lösenden -Problems auszudrücken </ font>.

5. Beispiel

Erstellen wir eine rekursive Funktion, die das folgende Beispiel gemäß dem Ablauf in Kapitel 3 löst.

** Problem: Invertieren Sie die Zeichenfolge. (Beispiel: abc → cba) **

Sei str1 die Zeichenkette, die du invertieren willst. (In Python codiert.)

  1. Der Name der rekursiven Funktion sei reverse_string:

    def reverse_string(str1):
    
  2. Konvertieren Sie die Stoppfunktion in Code:

    def reverse_string(str1):
        #Stoppfunktion
        #Wenn die Länge der Zeichenfolge 1 beträgt, wird sie aus der Funktion entfernt.
        if len(str1)<2:
            return str1
    
  3. Konvertieren Sie rekursive Funktionen in Code

  4. Zu lösendes Problem </ font>: Invertieren Sie die Zeichenfolge str1

  5. Einfaches Problem in einem Schritt </ font>: Invertiert "eine Zeichenfolge, in der das erste Zeichen aus der Zeichenfolge gelöscht wird" (dies wird als str1_rem bezeichnet). Hier drücken wir str1_rem im Code aus:

    ```python
    def reverse_string(str1):
        #Stoppfunktion
        #Wenn die Länge der Zeichenfolge 1 beträgt, wird sie aus der Funktion entfernt.
        if len(str1)<2:
            return str1
    
        #Löschen Sie das erste Zeichen aus der Zeichenfolge str1
        str1_rem=str1[1:]
    ```
    
  6. Ein einfaches Problem in einem Schritt </ font> kann durch Ihre eigene Funktion (reverse_string) gelöst werden ** Ich glaube von ganzem Herzen **!

  7. Die Lösung, die die Funktion reverse_string für das einfache Problem in einem Schritt </ font> erhält, ist sol1 (ich glaube von ganzem Herzen). Das heißt, sol1 = reverse_string ("eine Zeichenkette, die durch Subtrahieren des ersten Zeichens von der Zeichenkette erhalten wird") (ich glaube von ganzem Herzen):

    ```python
    def reverse_string(str1):
        #Stoppfunktion
        #Wenn die Länge der Zeichenfolge 1 beträgt, wird sie aus der Funktion entfernt.
        if len(str1)<2:
            return str1
    
        #Löschen Sie das erste Zeichen aus der Zeichenfolge str1
        str1_rem=str1[1:]
    
        #reverse_Zeichenfolge ist str1_Ich glaube von ganzem Herzen, dass ich vorher umkehren kann.
        sol1=reverse_string(str1_rem)
    ```
    
  8. Drücken Sie in sol1 die Lösung (sol) des -Lösungsproblems </ font> aus. Wenn nach sol1 "das erste Zeichen der Zeichenkettenzeichenfolge" hinzugefügt wird, wird es zu sol. Mathematisch gesehen ist sol = sol1 + "das erste Zeichen der Zeichenfolge":

    ```python
    def reverse_string(str1):
        #Stoppfunktion
        #Wenn die Länge der Zeichenfolge 1 beträgt, wird sie aus der Funktion entfernt.
        if len(str1)<2:
            return str1
    
        #Löschen Sie das erste Zeichen aus der Zeichenfolge str1
        str1_rem=str1[1:]
    
        #sol1 ist str1_Ich glaube von ganzem Herzen, dass es vorher eine umgekehrte Zeichenkette war.
        sol1=reverse_string(str1_rem)
    
        #Drücken Sie sol von sol1 aus
        sol=sol1+str1[0]
        
        return sol
    ```
    

** Seltsamerweise erzeugt dies eine rekursive Funktion **! ..

Wenn Sie den obigen Code kürzen,

def reverse_string(str1):
    if len(str1)<2:
        return str1
    return reverse_string(str1[1:])+str1[0]

Es wird.

6. Impressionen

Wenn der japanische Artikel schwer zu verstehen ist, werden die Details häufig im englischen Artikel geschrieben. Bevor Sie sich daran gewöhnen, wird empfohlen, den obigen Ablauf vor dem Codieren zu schreiben. Lassen Sie uns zunächst mit einem einfachen Beispiel üben. Zum Beispiel das Problem, alle Elemente eines Arrays anzuzeigen.

Vielen Dank

Wir möchten uns bei denen bedanken, die kommentiert haben und bei denen, die es korrigiert haben.

Recommended Posts