Java Fibonacci-Reihe - Rendite-Werte in Array
Ich versuche rekursiv berechnen Sie die fibonacci-Sequenz auf 100, speichern dieser Werte in ein array mit einem buildArray Methode und drucken Sie dann die Werte in dem array gespeichert. Ich bin immer eine "kann nicht aufgelöst werden, um eine variable" Kompilierungs-Fehler, wenn ich versuche zu drucken, A[N] in der main-Methode. Ich bin mit longs weil ich bin computing die Serie bis zu 100, obwohl ich weiß nicht, ob es notwendig ist, verwenden Sie sehnt sich.
Wenn ich Ersatz F(N) für Eine[N] der code funktioniert, aber ich muss die Werte in ein array und Druck-array. Dieser code selbst speichern die Werte in einem array? Ich bin gerade erst java, danke.
public class MyFibonacci {
public static final int MAX = 100;
public static long[] buildArray(int MAX, int N) {
long[] A = new long[MAX];
A[0] = 0;
A[1] = 1;
for(N = 2; N < MAX; N++)
A[N] = F(N);
return A;
}
public static long F(int N) {
if(N == 0)
return 0;
if(N == 1)
return 1;
return F(N - 1) + F(N - 2);
}
public static void main(String[] args) {
for(int N = 0; N < MAX; N++)
System.out.println(N + " " + A[N]);
}
}
A[0]=1
und if(N==0)return 1;
🙂InformationsquelleAutor corneria | 2013-04-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Hauptproblem ist, dass du nie den Aufruf der
buildArray
Funktion.Um Ihren code zu arbeiten, müssen Sie nur fügen Sie diese an
main
:Einige andere Dinge:
Können Sie die parameter
N
und einfach deklarieren Sie in der Funktion (oder entfernen Sie Sie alle zusammen, siehe unten).Haben Sie bereits Zugriff auf
MAX
, keine Notwendigkeit, um es zu übergeben an die Funktion.Die for-Schleife in
buildArray
ist eher ineffizient, Sie können festlegen, dass das array innerhalbF
.Angesichts der unten
A
als Klassenvariable ist sauberer als die übergabe um.Endlich der code:
Weil in den Prozess der Berechnung von F(n), die Sie auch berechnen, F(n-1), F(n-2), F(n-3), ..., F(0) wegen der rekursiven Aufrufe. So einfach berechnen Sie F(MAX) und speichern Sie diese Zwischenwerte, wie Sie gehen.
Danke, das funktioniert Super. Ich werde chip entfernt an meinem ursprünglichen code, um zu sehen, ob ich bekommen kann es arbeiten, einen anderen Weg, aber dieser ist großartig.
InformationsquelleAutor Dukeling
Haben Sie erklärt
A[]
im Rahmen derbuildArray(int MAX, int N)
. Als ErgebnisA[]
ist nicht von außen zugänglich vonbuildArray
. Sie brauchen, um Ihre declaraction vonlong A[]
zu einer Klasse variable.Zusätzlich, die Sie wirklich brauchen, um ausführen
buildArray
für das array aufgebaut werden.Für die Zukunft, empfehle ich mit der richtigen Tab-Strukturen. Es macht es viel einfacher, um zu sehen, was passiert. Ich habe deine bearbeiteten code (obwohl es müssen genehmigt werden), um diese aufzunehmen.
Ach ja, nicht sehen, dass. Ich werde Bearbeiten, die in.
Ich Stimmen Sie... aber ich habe auch geschrieben, den code zu veranschaulichen
Hier ein upvote zu! 😛
haha - und weiter geht es, dieses Ding von uns...
InformationsquelleAutor Aza
Hier ist der code für das, was Sie brauchen, denke ich:
wo haben Sie das genau?
Ich habe es in der gleichen Zeile, die Sie vorgeschlagen, in den code. Beachten Sie auch, dass als ich erklärte, int N, in der buildArray-Methode in der for-Schleife, anstatt-pass im Wert int N. ich glaube nicht, dass das mein problem, obwohl.
Ich sehe, es ist nur so, dass Sie gesagt, "long[] A = buildArray();"... ist, dass das, was Sie irgendwo unterbringen?
Yeah...so meine main-Methode: public static void main(String[] args) { long[] A = buildArray(); for(int N = 0; N < MAX; N++) System.aus.println(N + "" + A[N]);
InformationsquelleAutor d'alar'cop
Da Sie zuordnen kann array-Speicher, ist es sinnvoll, es zu nutzen während der Berechnung. Betrachten Sie diese Methode:
InformationsquelleAutor Andrej