Rekursive Funktion, die keine zurückgibt?

Ich schrieb die folgende Funktion, um meine eigene binäre Suche zu implementieren

def bisect(input, target): mid = len(input)/ 2 if len(input) == 1: if input[0] == target: return 1 else: return None elif input[mid] > target: bisect(input[:mid], target) elif input[mid] <= target: bisect(input[mid:], target) 

Ich weiß, dass meine Implementierung aus ist, aber ich bin neugieriger, den rekursiven Stack hier zu verstehen.

Wenn ich bisect(['d','e'], 'd') , sollte meine Funktion den Wert von zurückgeben

 bisect(['d'], 'd') 

Aber stattdessen gibt es keine. Weiterhin, wenn ich bisect(['d'], 'd') direkt bisect(['d'], 'd') , bekomme ich den richtigen Wert von 0. Wie ist das möglich?

One Solution collect form web for “Rekursive Funktion, die keine zurückgibt?”

Sie ignorieren die Rückgabewerte von rekursiven Anrufen. Sie müssen diese auch explizit zurückgeben:

 elif input[mid] > target: return bisect(input[:mid], target) elif input[mid] <= target: return bisect(input[mid:], target) 

Rekursive Anrufe sind genau wie jeder andere Funktionsaufruf; Sie geben dem Anrufer ein Ergebnis zurück. Wenn Sie den Rückgabewert ignorieren und die aufrufende Funktion endet, endet man mit dieser Aufruffunktion und gibt dann stattdessen None Stelle zurück.

  • Python leer dict nicht durch Verweis übergeben?
  • Python: Rekursive Funktion, um die größte Zahl in der Liste zu finden
  • Wie man sogar und ungerade Zahlen eines Arrays mit Rekursion summiert
  • N-Queen-Backtracking in Python: Wie gibt man Lösungen zurück, anstatt sie zu drucken?
  • Python rekursiver Funktionsfehler: "maximale Rekursionstiefe überschritten"
  • Rekursiver Generator zum Abflachen von verschachtelten Listen
  • Python max Rekursion, Frage über sys.setrecursionlimit ()
  • Trennungsliste mit Rekursion
  • Python rekursiv anhängen Liste Funktion
  • Rekursive Funktion gibt keine in Python zurück [doppelte]
  • Notwendigkeit, Pyramiden-Dreieck auf Python neu zu erstellen
  • Python ist die beste Programmiersprache der Welt.