Bedingung: Die Lösung erfolgt komplett objektorientiert.
In einer Klasse wird die Fibonacci-Folge sowohl iterativ, als auch rekursiv berechnet.
In einer anderen Klasse wird die Fakultät sowohl iterativ, als auch rekursiv berechnet.
Mittels der Vererbung bekommt eine dritte (Unter-) Klasse die Eigenschaften und Methoden der beiden oben genannten Klassen.
Über die Konsole ist eine positive ganze Zahl von einer Instanz der Unterklasse entgegenzunehmen. Ist diese Zahl gerade, ist die Fibonacci-Zahl mit diesem Index rekursiv zu berechnen. Ist diese Zahl ungerade, ist die Fakultät iterativ zu berechnen.
Schreibe eine Funktion noise_me() in der Unterklasse, welche das Ergebnis der oben beschriebenen Berechnung entgegennimmt und einen Durchschnittswert D der Ziffern dieser Zahl berechnet und gegebenenfalls D aufrundet.
Für eine gerade Zahl D wird zufällig rekursiv oder iterativ die Fibonacci-Zahl an der jeweiligen Stelle berechnet. Das Ergebnis wird an die Funktion noise_me() übergeben.
Für eine ungerade Zahl D wird zufällig rekursiv oder iterativ die Fakultät berechnet. Das Ergebnis wird an die Funktion noise_me() übergeben. Nach 1000 Aufrufen der Funktion noise_me() geben Sie in der Konsole aus, wie oft Ihre jeweilige rekursive und iterative Implementierung der Berechnung der Fibonacci-Zahl und der Fakultät (4 Werte) aufgerufen wurde.
Problem: Ich kann mir unter OOP bei Fibonacci und Fakultät wenig bis gar nichts vorstellen. Normalerweise werden solche Klassen ja erzeugt um Attribute und Werte aufzurufen und einzusehen. Bei Fibonacci muss doch gar nichts in der Shell definiert oder verändert werden. Ein erster Versuch meinerseits zur Implementierung, scheiterte, wie erwartet, kläglich.
Code: Alles auswählen
####rekursiv
class Fibonacci:
def nthNumber (self, n, recursive):
if recursive:
return self.nthNumber_recursive(n)
else:
return self.nthnNumber_iterative (n)
def nthNumber_recursive(self,n):
#self.n =+1
if n == 1:
return 1
elif n == 2:
return 1
elif n > 2:
return fibonacci(n-1) + fibonacci (n-2)
#self.result = self.recursive (value)
for n in range (1,10):
print (n, ".", fibonacci(n))
def nthNumber_iterative(self,n):
#### iterativ
#def fibonacci(n):
if n == 1:
return 1
elif n == 2:
return 1
a, b = 0, 1
for n in range(0, n):
a, b = b, a + b
return a
for n in range (0,10):
print (n, ":", fibonacci(n))
#self.result = self.iterative (value)