2017-12-29 10 views
-1

Ich habe ein paar Probleme, ein paar Dinge in Bezug auf rekursive Funktionen in Python (na ja, ich denke im Allgemeinen) zu verstehen. Ich versuchte, nach der Antwort zu suchen, war mir aber nicht sicher, wie ich danach suchen sollte.Rückgabewert für rekursive Funktionen in Python

Unter dem rekursiven Funktion Beispiel am häufigsten, wenn ich suche:

def sfactorr(j): 
    if j == 1: 
     return 1 
    else: 
     return j * sfactorr(j-1) 

jedes Mal, wenn die Funktion größer als 1 ist, beginnt es wieder, bis j == 1. Aber wenn es 1 trifft, soll nicht die Rückgabewert ist 1? Wenn Sie es ausführen, erhalten Sie natürlich das Ergebnis der ganzen Funktion, aber ich verstehe nicht ganz, warum das so ist.

Mit anderen Worten, wie kommt es, dass es den richtigen Wert zurückgibt und nicht die, die die Basisbedingung zurückgibt?

Dank

+1

Versuchen Sie, 'sfactorr (2)' von Hand Schritt für Schritt auszuwerten. – jwodder

+1

Der Rückgabewert ist "1", wenn Sie "j == 1" drücken, aber beachten Sie, dass Sie das mit "j" multiplizieren. Es gibt ein Video-Tutorial darüber, das ich gerade gestern gesehen habe (für Java, aber die allgemeine Idee steht immer noch) https://youtu.be/ozmE8G6YKww – BorrajaX

+1

'jedes Mal, wenn die Funktion größer als 1 ist, beginnt sie wieder bis j == 1.' ist falsch, was wirklich passiert ist 'jedes Mal, wenn die Funktion von 1 verschieden ist, beginnt sie wieder bis j == 1.' –

Antwort

1

Sie müssen die Schritte durcharbeiten.

Angenommen, wir übergeben 3 an die Funktion.

Wenn die Funktion zuerst ausgeführt wird, ist j> 1. Statt also 1 zurückzugeben, gibt sie j * zurück [die Funktion, die mit einer weniger als j aufgerufen wird. Aber es kann das nicht tatsächlich zurückgeben, bis die aufgerufene Funktion zurückgekehrt ist.

Es macht so weiter, bis j 1 ist. Das ist die Grundbedingung. Wenn j 1 ist, wird 1 zur darüberliegenden Funktion zurückgeführt.

So. Beginnend mit j == 3:

(1) j == 3, returning j * the result of (2) 
(2) j ==2, returning j * the result of (3) 
(3) j == 1, returning 1 

So sind die Funktionen in Reihenfolge aufgerufen werden (1), (2), (3), aber zurückkehren, um (3), (2), (1).

(3) returns 1 
(2) takes the 1 from (1) and multiplies it by (2), resulting in 2. Then it returns that. 
(1) takes the 2 from (2) and multiplies it by 3, resulting in 6. It returns that as a final value. 

Rekursive Anweisungen bedeuten, dass die Funktionen alle in sich selbst zurückfallen, nicht dass nur die letzte Anweisung ausgeführt wird.

+0

Ich sehe, danke, dass du das geklärt hast. Ich werde weitermachen und ein bisschen üben, bis ich den Dreh raus habe. – rammpeth

Verwandte Themen