Die anderen Responder haben alle gute Antworten gegeben. Ich möchte Ihnen zeigen, wie Refactoring in Aktion funktioniert, nicht nur für dieses spezifische Problem, das Dinge über Fibonacci-Zahlen kennt, sondern als einen iterativen Prozess, der den Code sorgfältig auf das Nötigste reduziert. Durch das Refactoring können wir mit der Arbeit beginnen, aber mit kompliziertem Code und Schritt für Schritt einen Schritt nach unten machen. Lassen Sie mich Ihnen alle Zwischenschritte zeigen, die Sie während der Arbeit auf dem Weg zur endgültigen Lösung machen könnten.
Hinweis: Ich habe Ihre anfänglichen Startwerte auf 1 und 1 anstelle von 1 und 2 geändert. Streng genommen beginnt die Fibonacci-Sequenz mit zwei 1en, wie in 1, 1, 2, 3, 5 ...
Schritt 1 - Vertauschen Sie die Liste
Wenn Sie die wiederholten list.size() - x
-Ausdrücke loswerden wollen, können Sie die Zahlen in umgekehrter Reihenfolge hinzufügen. Dann ist es einfacher, die zwei letzten Zahlen zu finden.
%Vor%
Schritt 2 - Wechseln Sie zu einer verknüpften Liste
Wechseln wir die ArrayList
zu einer LinkedList
. Das Einfügen am Anfang eines Arrays ist ineffizient, während es eine schnelle Operation für eine verknüpfte Liste ist.
Entlang dieser Zeilen müssen wir die get()
-Aufrufe in der zweiten Schleife loswerden. Das Nachschlagen von Einträgen nach Index erfolgt langsam über verknüpfte Listen. Um dies zu tun, habe ich die zweite Schleife geändert, um for (variable: container)
syntax zu verwenden.
%Vor%
Schritt 3 - Kombiniere die Schleifen
Die nächste Optimierung besteht darin, die beiden Schleifen zu kombinieren. Anstatt zuerst alle Zahlen zu generieren und dann später nach geraden Zahlen zu suchen, können Sie beim Generieren nach geraden Zahlen suchen.
%Vor%
Schritt 4 - Löschen Sie die Liste
Jetzt werden Sie vielleicht bemerken, dass Sie nie auf Zahlen jenseits von Index 1 verweisen. Zahlen an den Positionen 2 und darüber hinaus werden nie wieder verwendet. Dies deutet darauf hin, dass Sie nicht einmal mehr eine Liste aller Nummern führen müssen. Da Sie nach den geraden Zahlen suchen, wie sie erzeugt werden, können Sie jetzt alle bis auf die zwei letzten Zahlen wegwerfen.
Lassen Sie uns als kleines Detail auch value
in total
umbenennen.
%Vor%