ich möchte gerne für die Funktionen fib1(n), fib3(n), fib5(n) den maximalen Parameter n herrausfinden, bzw bis zu einer Zeit von 10s.
Hat jemand eine Idee dafür?
Mit dem Aufruf der Funktion "fib1_test(0)" bekam ich abn n=496 die Fehlermeldung: "RuntimeError: maximum recursion depth exceeded", wenn
ich aber "fib1(497)" aufrufe funktioniert es doch. Warum dann über den Aufruf in der Schleife nicht?
Code: Alles auswählen
def fib1(n): # Funktion berechnet die n-te Fibonacci-Zahl
if n <= 1:
return n # Rekursionsabschluss
return fib1(n-1) + fib1(n-2) # Baumrekursion
#funktioniert bis n=496. Bei n=497
def fib3(n):
f1, f2 = fib3Impl(n) # Hilfsfunktion, f1 ist die Fibonacci-Zahl von (n+1) und f2 ist die Fibonacci-Zahl von n
return f2
def fib3Impl(n):
if n == 0:
return 1, 0 # gebe die Fibonacci-Zahl von 1 und die davor zurück
else: # rekursiver Aufruf
f1, f2 = fib3Impl(n-1) # f1 ist Fibonacci-Zahl von n, f2 die von (n-1)
return f1 + f2, f1 # gebe neue Fibonacci-Zahl fn+1 = f1+f2 und die vorherige (fn = f1) zurück.
def fib5(n):
f1, f2 = 1, 0 # f1 ist die Fibonaccizahl für n=1, f2 die für n=0
while n > 0:
f1, f2 = f1 + f2, f1 # berechne die nächste Fibonaccizahl in f1 und speichere die letzte in f2
n -= 1
return f2
def fib1_test(z):
z+=1
print z, ":"
print fib1(z)
fib1_test(z)
def fib3_test(z):
z+=1
print z, ":"
print fib3(z)
fib3_test(z)
def fib5_test(z):
z+=1
print z, ":"
print fib5(z)
fib5_test(z)