2017-09-12 3 views
0

Ich bin neu im Codieren und versuche, mich über Rekursion zu unterrichten, indem ich eine sehr einfache Funktion erstelle, die sich selbst aufruft. Allerdings meinen Code verhält sich etwas anders, wie ich es erwartet hatte:Python-Rekursion funktioniert nicht wie erwartet

get Benutzereingaben Zahl, die nicht größer sein darf als 50

def getinput(): 
    input = int(raw_input("type number under 50 >>> ")) 
    if input < 50: 
    return input 
    else: 
    print input, "no, must be under 50" 
    getinput() 

print getinput() 

Dies ergibt sich folgendes Verhalten:

Dieses Bit wie erwartet

C: \ Python27> Python recur.py

Typ-Nummer unter 50 >>> 23

Dieses Bit unerwartete

C: \ Python27> Python recur.py

Typennummer unter 50 >>> 63

63 nein, muss unter 50 sein

typnummer unter 50 >>> 23

Keine

Meine Frage ist, warum ist die letzte Zeile "None", und nicht 23? Mein Code scheint die Funktion korrekt erneut aufzurufen, wenn der Benutzer eine Zahl von 50 oder höher eingibt, aber warum gibt der zweite Aufruf nicht 23 (die gleiche wie die ursprüngliche Ausgabe) zurück?

Jede Beratung viel

geschätzt
+3

Sie müssen den Funktionsaufruf zurückgeben, sonst wird Ihre ursprüngliche Funktion in diesem Fall zurückkehren? – miradulo

Antwort

0

Sie nicht das Ergebnis der GetInput zurückkehren(), wenn die Zahl größer als 50

def getinput(): 
input = int(raw_input("type number under 50 >>> ")) 
    if input < 50: 
    return input 
    else: 
    print input, "no, must be under 50" 
    return getinput() 

print getinput() 
0

Sie einen return im sonst Zustand verfehlt. Der folgende Code sollte funktionieren:

def getinput(): 
    input = int(raw_input("type number under 50 >>> ")) 
    if input < 50: 
    return input 
    else: 
    print input, "no, must be under 50" 
    return getinput() 

print getinput() 
0

In diesem Fall Ihre Funktion input

if input < 50: 
    return input 

Sie verwenden Rekursion zurückkehren, so ist es nur wie ein Stapel am Ende alle Rückgabewerte kommen zurück zu der Funktion, die aufgerufen wurde. Wenn die Bedingung if input < 50 nicht erfüllt ist, wird Keine zurückgegeben und Sie verwenden print(getinput()).

| 23 | 
| 63 | -> None 
----- 

Das ist nur mein Verständnis über Rekursion.

Wenn also der Wert größer als 50 ist, geben Sie einen Wert anstelle von None an die Funktion zurück zurück.

return getinput() 

Verwenden Sie bitte auch andere Variablennamen anstelle von input.

Verwandte Themen