2016-07-12 15 views
0

Wäre jemand bereit zu erklären, warum das erste nicht funktioniert, aber das zweite tut?Returning Funktionen oder Werte: rekursive Python-Funktionen

Im ersten berechnet die Funktion die endgültige bereinigte Wert ...

# returns None 
def _pareRotation(degs): 
    if degs > 360:   
     _pareRotation(degs - 360) 
    else: 
     print "returning %s" % degs 
     return degs 

... aber gibt None:

print _pareRotation(540) 
>> returning 180 
>> None 

Wenn wir jedoch die Dinge ein wenig und Rückkehr Flip die Funktion ...

# returns expected results 
def _pareRotation(degs): 
    if degs < 360:   
     print "returning %s" % degs  
     return degs 
    else: 
     return _pareRotation(degs - 360) 

... es funktioniert wie erwartet:

print _pareRotation(540) 
>> returning 180 
>> 180 

Meistens wundern, was bewirkt, dass None aus der rekursiven Schleife ausgeworfen werden?

Antwort

4

Sie sind nicht im ersten Fall der Rückkehr:

def _pareRotation(degs): 
    if degs > 360:   
     _pareRotation(degs - 360) 
# ^
+1

Es sollte eine kanonische Frage für dieses sein, wenn es nicht bereits gibt. Diese Art von Rekursionsfehler kommt mindestens 5 Mal pro Tag auf diesem Tag vor. –

+0

Gute Trauer, und da ist es. Vielen Dank. Ich stimme @ Two-BitAlchemist zu, aber es könnte einige subtile Abweichungen in den Fragen geben. Ich hatte Probleme, die Idee zu knacken, dass die Zielvariable - sagen wir "final_degs" - in gewisser Weise die rekursive Funktion "werden" würde. Wenn ich 'final_degs = _pareRotation (540)' ausführe, und ich 'final_degs' drucke oder verwende, verwende ich tatsächlich eine Variable, die einige Transformationen durchlaufen hat (Funktion zu int). Ist das eine genaue Art darüber nachzudenken? – ghukill

0

Ja, Sie kehren nicht im ersten Fall, und auch ich denke, es sollte% d sein, für int.