Java rekursiv ein array umkehren
Ich habe nicht gefunden was mit der spezifischen Bedürfnisse meiner Funktion, dies zu tun, ja, es ist für die Hausaufgaben.
Also ich habe:
public void reverseArray(int[] x) {
}
Voraussetzung: x.Länge > 0
Die Tatsache, dass ich kann nicht die Funktion haben, etwas zurückzugeben, und das einzige argument ein array ist, lässt mich ratlos.
Ich habe versucht, mit Hilfe von loops zusammen mit der Rekursion, aber ich habe alles versucht, scheint am Ende mit der unendlichen Instanzen der Funktion gemacht werden.
Ich habe eine Idee/Vorschlag, eine andere Funktion, die zusammen mit diesen ein, aber, wie die original-rekursiv ist mir ein Rätsel im moment.
Jede Hilfe ist willkommen.
Sie können ändern Sie die Daten in das array auf Ihre Methode. Es ist nichts falsch Rückgängigmachen eines Arrays in einer Methode, die nichts zurückgibt. Es wäre gut, poste deine Idee und die wir gerne geben Sie Ratschläge (nicht code) von dort.
By the way, können Sie fügen Sie einen anderen parameter auf Ihre
Wir können nicht fügen Sie einen weiteren parameter, wenn das so war, weiß ich, wie ich es tun würde. Und ja, helper-Methoden, die erwähnt wurden, als eine sinnvolle option, ich bin nur nicht sicher, wie das umgesetzt würde.
zusätzliche Parameter sind verboten, denke ich.
Wenn Sie nicht haben keine zusätzlichen Parameter (und Sie nicht haben, können zusätzliche Elemente, die im array zu handeln, wie Parameter) und Sie können keine Kopien erstellen, der das array dann können Sie es nicht. Wenn Sie Kopien machen zu können (und die Verwendung von System.arraycopy), dann kannst du es tun, indem Sie kürzer und kürzer Kopien des Arrays.
By the way, können Sie fügen Sie einen anderen parameter auf Ihre
reverseArray
Methode?Wir können nicht fügen Sie einen weiteren parameter, wenn das so war, weiß ich, wie ich es tun würde. Und ja, helper-Methoden, die erwähnt wurden, als eine sinnvolle option, ich bin nur nicht sicher, wie das umgesetzt würde.
zusätzliche Parameter sind verboten, denke ich.
Wenn Sie nicht haben keine zusätzlichen Parameter (und Sie nicht haben, können zusätzliche Elemente, die im array zu handeln, wie Parameter) und Sie können keine Kopien erstellen, der das array dann können Sie es nicht. Wenn Sie Kopien machen zu können (und die Verwendung von System.arraycopy), dann kannst du es tun, indem Sie kürzer und kürzer Kopien des Arrays.
InformationsquelleAutor | 2012-10-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich die Codierung wurden diese, ich würde erstellen Sie einen temporären array (vielleicht mit einem element entfernt?) für den rekursiven aufrufen und kopieren Sie Elemente wieder in das original-array vor der Rückgabe aus der Funktion. Sie müssen auch zu finden, ein base-case-zum beenden der Rekursion.
Beschloss ich, meine ursprüngliche Antwort hatte zu viele details, so schrieb ich es.
Ich hatte das als Idee, ich war einfach nicht sicher, wie es zu implementieren früher, ich glaube, ich habe es nun herausgefunden. Pass in einer abgespeckten array (ersten und letzten Elemente entfernt) in eine neue Instanz der Funktion, bis die Länge ist 2, wechseln Sie (wenn Länge == 1, nichts tun), und dann von da, an jedem Ende eine Instanz, tack auf die entfernten Elemente, aber eingeschaltet?
Dies brachte mich auf den richtigen Weg, ohne mir zu sagen genau, was Sie tun, sehr geschätzt.
Ich hatte nur im Hinterkopf, entfernen Sie entweder die ersten oder letzten element. Ich mag deine Idee, Sie zu entfernen und wechseln.
InformationsquelleAutor Code-Apprentice
Test:
Rekursive O(n), keine temporären Arrays benötigt.
InformationsquelleAutor 卢声远 Shengyuan Lu
Denn das ist Ihre Hausaufgaben, schlage ich vor, ein Beispiel :
Angegebenen Reihenfolge :
1 2 3 4 5 6 7 8 9 10
Können Sie ändern :
10 2 3 4 5 6 7 8 9 1
Danach:
10 9 3 4 5 6 7 8 2 1
.....
Wie Sie sehen, Schritt für Schritt, die Reihenfolge ist "besser" und das problem "kleiner". So, das problem, das Sie lösen sollte abgeschlossen ist :
1) Wie wendet man das rekursive Aufruf für diese Methode. für das ursprüngliche, das Methode ist :
reverse(int[] a)
. so, nach dem ersten Schritt, sollten Sie erstellen Sie ein arrayb from a[2] --> a[n-1]
. und mit reverse(int[] b)`.2) nach dem reverse
b
was sollen wir tun, um umzukehren ? Zuweisen von Werten von b wieder zurück zu a.3) stop-Bedingung : das, was stop-Bedingung ? Sie sehen, die Elemente von array b weniger als Elemente des Arrays ein. So, zu dem Schritt, sollten wir aufhören ?
Hoffe, dies hilft 🙂
Es hat geholfen, vielen Dank.
InformationsquelleAutor hqt
Versuchen Sie etwas, das wie unten:
Obwohl es funktioniert, ist diese Art der Umkehr ist schrecklich ineffizient so viele sub-arrays werden erzeugt und gelesen werden. Das macht die Laufzeit von 0(n) 0(n^2)!
InformationsquelleAutor Yogendra Singh
InformationsquelleAutor rashedcs
//Wir sind gerade dabei ein Betrieb hier und den Aufruf einer Hilfsmethode.
InformationsquelleAutor WIll
Hier ist der main-Methode:
und hier ist die rekursive Funktion:
InformationsquelleAutor Arjun Thakur
}
InformationsquelleAutor user1177645
Dies ist wahrscheinlich der einfachste Weg, nicht die Schnellste, aber wahrscheinlich das einfachste.
Ganzes Programm würde wie folgt Aussehen:
Hoffe, es hilft!
InformationsquelleAutor juan barrera
InformationsquelleAutor Edmond T Zinzombe
psuedo-code
Dies ist eine offensichtliche Lösung, aber in Java erfordert den Aufbau einer neuen array und kopieren zu/von es mit dem System.arraycopy, so ein paar Zeilen komplexer als der pseudocode vorgeschlagen.
Warum ist diese Antwort markiert? Es ist das gleiche wie Yogendra Singh (später) der Vorschlag, die bekommen +2 so weit.
Ich weiß nicht, warum es nach unten gekennzeichnet. Denn es ist die erste Antwort, die ich Schätze.
Und warum hat der Kommentar von @Thilo +6, obwohl es falsch ist??
InformationsquelleAutor pogo
Da gibt es keine Anweisung, die Schlaufen dürfen nicht verwendet werden:
Wahrscheinlich der Schnellste der Menge.
Als ich im college war, über einen computer wurde manchmal als Betrug. Was auch immer funktioniert!
Dies ist die Schleife, nicht rekursiv.
Der Aufruf der Methode ist rekursiv, aber die eigentliche operation ist nicht.
guter Weg, um zu pissen Lehrerin aus 😀
InformationsquelleAutor Hot Licks