Python Recursive Funktion für Collatz Conjecture

Ich habe das folgende rekursive Programm geschrieben, um die Anzahl der Schritte zu zeigen, die eine Zahl in Collatz Conjecture durchläuft:

def cycle_length(n): count = 0 if n == 1: return count if n%2 == 0: count += cycle_length(int(n/2)) +1 elif n%2 != 0: count += cycle_length(int(3*n+1)) + 1 print("The count is: ",count) return count print(cycle_length(22)) 

Allerdings ist die Zählung 15, wenn es 16 sein sollte. Allerdings, wenn ich die Anfangszählung auf 1 ändern oder sagen:

 return count + 1 

Es verdoppelt die Zählung auf 31. Ich kann nicht herausfinden, was das verursacht.

Danke für Ihre Hilfe.

3 Solutions collect form web for “Python Recursive Funktion für Collatz Conjecture”

Wenn n 1 ist, müssen Sie die count um 1 erhöhen, bevor Sie sie zurückgeben.

 def cycle_length(n): count = 0 if n == 1: return count + 1 # or simply return 1 ... 

Aber ich denke, Ihr Code ist syntaktisch korrekt, wenn Sie nicht wählen, den nullten Schritt zu zählen.

Siehe http://oeis.org/A070165 .

Wenn du count = 1 machst, solltest du nicht zählen + = in der späteren if, sonst wenn Aussagen. Auch scheint es mir, dass du früher schon richtig korrigierst. Allerdings, wenn Sie 1 hinzufügen möchten (dh das Zählen des Schrittes, wenn 1 auftritt), machen Sie einfach Folgendes:

  def cycle_length(n): count = 1 if n == 1: return count if n%2 == 0: count = (cycle_length(int(n/2)) +1) elif n%2 != 0: count = (cycle_length(int(3*n+1)) + 1) return count 

Die Collatz-Sequenz beginnt immer in der angegebenen Zahl, daher sollte dein Basiskoffer 1 zurückgeben

Das heißt, du kannst es auch mit Iteration berechnen, denn Python ist nicht sehr gern Rekursion, zum Beispiel kann dein Code 9780657631 oder 75128138247 nicht berechnen, ohne einen Rekursionsfehler zu bekommen

Hier ist die iterative version

 def collatz_length(n): if n<1: raise ValueError count = 1 while n != 1: if n%2 == 0: n = n//2 else: n = 3*n+1 count += 1 return count 
  • Rekursive Funktion gibt keine in Python zurück [doppelte]
  • Rekursionsfunktion in Python
  • Python rekursive Funktion, die von 0 bis n?
  • Python - Eigenschaftseinstellung aus der Liste verursacht maximale Rekursionstiefe überschritten
  • Zählen der Rekursion in einem Python-Programm!
  • Lösen von vollständig versteckten Ausdrücken mit Rekursion
  • Lock-Kombinationen für dynamische Sperrgröße
  • N-Queen-Backtracking in Python: Wie gibt man Lösungen zurück, anstatt sie zu drucken?
  • Ich versuche, eine Funktion zu machen, die max aus verschachtelter Liste zurückgibt?
  • Ist diese Funktion rekursiv, obwohl sie sich nicht nennt?
  • Den längsten Teilstring in alphabetischer Reihenfolge finden
  • Python ist die beste Programmiersprache der Welt.