Python recursion return Keine Typ

Ich verstehe es nicht, wie kann ich eine List anstelle eines None ?

 class foo(): def recursion(aList): if isGoal(aList[-1]): return aList for item in anotherList: newList = list(aList) newList.append(item) recursion(newList) someList = [0] return recursion(someList) 

Grundsätzlich soll der Code alle Pfade aufzeichnen (Start bei 0). Wer zuerst 100 kommt, wird zurückgegeben. isGoal() ist zu prüfen, ob das letzte Element des Pfades 100 ist. Und eine anotherList Liste ist eine kleine Liste von Zufallszahlen (von 0 bis 100).

2 Solutions collect form web for “Python recursion return Keine Typ”

return Anweisung

Dieses Problem hat mich schon eine ganze Weile gedauert, als ich anfing, Rekurs zu lernen.

Eine Sache im Auge zu behalten, wenn es um Python-Funktionen / Methoden geht ist, dass sie immer einen Wert zurückgeben, egal was. Also sagst du vergessen, eine return Anweisung im Körper deiner Funktion / Methode zu deklarieren, Python kümmert sich darum für dich dann und gibt return None am Ende davon zurück.

Was bedeutet dies, dass, wenn Sie in den Körper der Funktion schrauben und die return print type(messed_up_function()) oder weglassen, anstatt einer erwarteten Rückkehr Ihre print type(messed_up_function()) wird NoneType print type(messed_up_function()) drucken.

Rekursion beheben

Jetzt mit dem im Auge, wenn es um Rekursion geht, stellen Sie zunächst sicher, dass Sie einen Basiskoffer neben dem induktiven Fall haben , d. H. Eine unendliche rekursive Schleife zu verhindern.

Als nächstes stellen Sie sicher, dass Sie auf beiden Fällen zurückkehren, so etwas wie dieses:

 def recur(val): """ takes a string returns it back-to-front """ assert type(val) == str # the base case if len(val) == 1: return val # the inductive case else: return val[-1] + recur(val[:-1]) # reverses a string char by char 

Also, was das tut, ist es immer return s und ist 100% unendliche Rekursionsbeweis, weil es einen gültigen Basisfall und eine dekrementierte Länge bei jedem induktiven Schritt hat.

Stack Viewer, um rekursive Funktionen zu debuggen

Für den Fall, dass wir recur('big') mit dem hinzugefügten assert False zu Beginn des recur('big') laufen würden, hätten wir diese Stack-Struktur:

Umfang

Von dort aus können wir sehen, dass wir bei jedem rekursiven Schritt den Wert haben, der der einzige Parameter dieser Funktion ist, kleiner und kleiner wird, bis er auf len(val) == 1 trifft und dann die endgültige Rückkehr erreicht oder in diesem Fall assert False . So ist dies nur eine praktische Möglichkeit, Ihre rekursiven Funktionen / Methoden zu debuggen. In IDLE können Sie auf eine solche Ansicht zugreifen, indem Sie Debug > Stack Viewer in der Shell aufrufen.

Die Funktion ist:

 def recursion(aList): if isGoal(aList[-1]): return aList for item in anotherList(): newList = list(aList) newList.append(item) recursion(newList) # here you ignore what recursion returns # when execution reaches this point, nothing is returned 

Wenn die Ausführung meinen hinzugefügten Kommentar erreicht, nachdem die for-Schleife abgeschlossen ist, wird die Funktion beendet und nichts wird zurückgegeben. Und wenn du eine Funktion beendest, ohne eine return Anweisung ausgeführt zu haben, wird None zurückgegeben. Sie müssen sicherstellen, dass Sie etwas von der rekursiven Funktion zurückgeben.

Ich kann Ihnen nicht raten, wie man die Funktion neu schreibt, da ich nicht weiß, was es zu tun versucht. Es ist sehr weit von offensichtlich zu mir, wie es geändert werden muss. Was ich aber mit vollem Vertrauen sagen kann ist, dass du etwas zurückgeben musst!

  • Python rekursive Funktion, die von 0 bis n?
  • Ich versuche, eine Funktion zu machen, die max aus verschachtelter Liste zurückgibt?
  • Rekursiv finden Sie alle Münzkombinationen, die eine bestimmte Menge produzieren
  • Integer auf Basis-x-System mit Rekursion in Python
  • Was ist die maximale Rekursionstiefe in Python und wie man es erhöht?
  • Rekursiver Generator zum Abflachen von verschachtelten Listen
  • Ist es möglich, die Rekursion aus dieser Funktion zu entfernen?
  • Python Recursive Funktion für Collatz Conjecture
  • N-Queen-Backtracking in Python: Wie gibt man Lösungen zurück, anstatt sie zu drucken?
  • Iteration in Rekursion umwandeln
  • Python-Rekursions- und return-Anweisungen
  • Python ist die beste Programmiersprache der Welt.