Es gibt ein Problem mit der rekursiven Definition der Fibonacci-Sequenz, wenn es um Effizienz geht. Es ist wie folgt definiert:Optimieren der rekursiven Funktion der Fibonacci-Sequenz durch Erstellen eines Wrappers
private fib(int n) {
if(n < 2) return n;
else return fib(n - 1) + fib(n-2);
}
Angenommen, wir rufen fib (5). Dies macht 1 Anruf zu fib (4), zwei Anrufe zu fib (3), drei Anrufe zu fib (2), fünf Anrufe zu fib (1) und drei Anrufe zu fib (0).
In seinem Buch
Programmierung Abstraktionen in Java von Eric Robert
Robert erwähnt, dass wir diese Effizienz Problem durch die Realisierung lösen können, dass die Fibonacci-Sequenz ist nur ein Spezialfall des additiveSequence(int n, int t0, int t1)
Verfahrens . Grundsätzlich ist die Fibonacci-Sequenz nur eine additive Sequenz, die streng mit 0 und 1 beginnt. Es gibt eine unendliche Anzahl von Sequenzen, die mit der von Fibonacci ausgedrückten Rekursionsbeziehung übereinstimmen.
Der Autor löst die Effizienz Problem wie folgt:
private int fib(int n) {
return additiveSequence(n, 0, 1);
}
Also meine Fragen ist, durch die fib-Sequenz macht ein Wrapper für die allgemeinere additiveSequence Methode werden wir wirklich die Effizienz zu verbessern? Wäre nicht die Implementierung von additiveSequence genau dasselbe "Problem" in Bezug auf die Effizienz, die fib hatte, da es der gleichen genauen Wiederholungsbeziehung folgt?
Sie haben nicht definiert, wie Ihre 'additiveSequence' implementiert wird. Wenn es nicht effizient implementiert wird, haben Sie ein Effizienzproblem. –
@SalvadorDali Der Autor liefert keine Implementierung. Der Autor geht davon aus, dass Sie bereits eine Methode namens additiveSequence haben und diese als Return-Anweisung der Methode 'fib' verwenden. Deshalb bin ich so verwirrt. –
Dann ist es höchstwahrscheinlich entweder kein gutes geschriebenes Buch oder Sie haben es nicht sorgfältig gelesen. 'additiveSequence' ist keine allgemein bekannte Methode, daher würde ich nicht erwarten, dass die Leute es wissen. Und die Komplexität des Algorithmus und sogar seine Gültigkeit hängt von dieser Methode ab. –