ich wollte mich an euch wenden und zwar geht es um das sogenannte Collatz-Problem. Hierbei soll ich testen wie oft ich Zahlen iterieren muss um auf den Wert 1 zu kommen (x%2==0, dann x /2. Wenn ungerade 3*x+1).
Diese Werte sollte ich für die ersten 2**20 Zahlen berechen und in ein Dictionairy schreiben. Ihr seht unten meinen Stand.
Jedoch gibt mir meine Funktion als return value immer None aus. Wähle ich statt ""return count"" ""return print(count)"", printet die Funktion was sie soll.
Aber sobald ich nur count returne, scheint die Funktion nicht meine Variable count an die nächste Funktion zu übergeben.
Rufe ich diese über meine zweite Funktion auf, bekomme ich anscheinend None.
Wenn ihr andere Lösungungsansätze habt, welche schneller und einfacher sind, dann immer gerne her damit, ich bin noch im Anfangsstadium was Python angeht und habe Lust zu lernen.
Vielen Dank schonmal

Code: Alles auswählen
iterdict = {1:0}
def iter(n,count):
"""Dies ist die Funktion, welche darstellt wie oft man eine Zahl iteriert werden muss, im Sinne des Collatz-Problems, bis sie das erste Mal den Wert 1 erreicht. Setzen sie die Variable Count zu Beginn auf 0 und wählen Sie ihre Zahl n beliebig."""
if n in iterdict:
count = count + int(iterdict[n])
return count
elif n>1:
if n%2==0:
n = n/2
count = count + 1
iter(n,count)
else:
n = n*3 +1
count = count + 1
iter(n,count)
else:
print("Bitte geben Sie einen Wert über 1 ein")
def tau(N):
"Dies ist die Funktion Tau, welche berechnet wie oft ein Element, im Sinne des Collatz-Problems iteriert werden muss, um das erste Mal den Wert 1 zu erreichen. Sie berechnet alle Werte bis zu einem Endpunkt N und fügt Sie in das Dictionary iterdict"
for i in range (1,N):
iterdict[i] = iter(i,0)