2012-04-01 14 views
-3
#Calculates to the index position of a fib number. 
def f3(n): 
    if n < 2: 
     return n 
    return f3(n-2) + f3(n-1) 

Die Funktion akzeptiert nur ein Argument, noch zwei werden in der Rückkehr gesendet, aber es funktioniert! Was passiert hier?Verkettung und Rekursion

Wenn ich f3 (n-3) zurückgebe, bricht die Funktion zusammen. Welchen Effekt hat die Verkettung?

Antwort

5

Addition ergibt einen einzelnen Wert.

>>> 1 + 2 
3 
>>> [1] + [2] 
[1, 2] 
1

Python wertet den Ausdruck f3(n-2) + f3(n-1), bevor er zurückkehrt, so dass ihr tatsächlich den Wert von ihnen kombiniert zurück. Das gleiche gilt für f3(n-2), dessen erste Auswertung n-2 ist und dann als Wert an f3() übergeben wird.

Die Anzahl der Rückgabeargumente hat nichts mit der Anzahl der Argumente zu tun, die eine Funktion als Eingabe benötigt.

+0

Wenn Ich versuche zu benutzen (n-3) der Func bricht zusammen. Warum muss ich zwei in der Rückkehr verketten? – pythondjango

+0

@pythondjango: Wo siehst du Verkettung? Es gibt hier keine Verkettung. – cha0site

+1

Wenn Sie nur 'f3 (n-3)' anstelle von 'f3 (n-2) + f3 (n-1)' verwenden? Es ist wegen der Art, wie die Fibonacci-Rekursion funktioniert. Ich denke, das könnte helfen zu verstehen, wie es funktioniert: http://ozark.hendrix.edu/~burch/csbsju/cs/160/notes/29/0.html . – veiset

0

Die Linie f3(n-2) + f3(n-1) nur ein Wert zurückkehrt, ist das Ergebnis von f3 zur Eingabe n-2 berechnen und dann diesen Wert zu dem Ergebnis, das Hinzufügen f3 für die Eingabe zum Rück n-1

In Python, der Mechanismus der Berechnung mehrere Werte von einer Funktion ist durch Packen sie in einem Tupel und dann extrahieren sie zum Zeitpunkt des Aufrufs der Funktion (nicht der Fall in Ihrer Frage!) Zum Beispiel:

def multivalue(x, y) 
    return (x, y) 

a, b = multivalue(5,10) 
# here a holds 5, and b holds 10