Heim >Computer-Tutorials >Computerwissen >Ich möchte alle um eine detaillierte Erklärung des rekursiven Algorithmus in Java bitten.
öffentlicher Klassentest{
public static int getResult(int parameter) {
if (Parameter == 0) { Ergebnis zurückgeben; } anders { Ergebnis *= Parameter; return recursiveFunction(parameter - 1, result); }
Rücksendenummer;
}
public static void main(String[] args) { //Schreiben Sie hier Ihren Code }
int result = result(5);
System.out.println(result);
}
}
Das Ausführungsprinzip ist wie folgt:
result(5) Geben Sie zunächst den Funktionskörper ein, um zu bestimmen, ob der Parameter kleiner oder gleich 1 ist. Zu diesem Zeitpunkt ist der Parameter gleich 5 und die Bedingung ist nicht erfüllt. Parameter*result(parameter-1) wird ausgeführt. das heißt, 5 * result(5-1), und das Programm wird wiederholt ausgeführt ...
5*Ergebnis(5-1)
4*Ergebnis(4-1)
3*Ergebnis(3-1)
2 * result(2 - 1) Zu diesem Zeitpunkt ist der Parameter gleich 1 und erfüllt die Bedingungen. Die Funktion gibt 1 zurück und gibt Schicht für Schicht zurück. Das heißt:
Ergebnis(1) =1
2*Ergebnis(1)=2*1=2
3*Ergebnis(2)=3*2=6
4*Ergebnis(3)=4*6=24
5*Ergebnis(4)=5*24=120
Das Programm ist wie folgt, das Eingabeformat ist:
5
3 1 2 1 2 bedeutet, dass die erste Zeile eine Zahl ist und die Anzahl der Zahlen angibt, die als nächstes eingegeben werden sollen. Die zweite Zeile enthält n Zahlen, die die zu sortierenden Zahlen darstellen. Bei der Eingabe wird davon ausgegangen, dass die zu sortierenden Zahlen alle nicht negative Zahlen sind.
java.io.File importieren;
import java.io.FileNotFoundException;
java.util.Arrays importieren;
java.util.Scanner importieren;
öffentliche Hauptklasse {
statisches final int maxn = 1000;
int n; //Anzahl der Array-Elemente
int[] a; // Array
boolean[] used; // Hilfsvariable, markiert, ob das Element während des rekursiven Prozesses verwendet wurde, used[i] gibt an, ob das i-te Element verwendet wurde
int[] cur; // Aktuelle Arrangementnummer speichern
// Die gesamte Anordnung rekursiv ohne Duplizierung drucken, derzeit an der IDX-Position drucken
void print_comb(int idx) {
Wenn idx == n, bedeutet dies, dass das letzte Element durchlaufen wurde und cur ausgegeben werden kann.
for(int i = 0; i
if(i > 0) System.out.print(" ");
System.out.print(cur[i]);
}
System.out.println();
}
int last = -1; // Um Duplikate zu vermeiden, verwenden Sie die letzte Variable, um den Wert der letzten Suche aufzuzeichnen
for(int i = 0; i
if(used[i]) fortfahren;
if(last == -1 || a[i] != last) { // Nur wenn die aktuelle Zahl nicht wiederholt wird und nicht verwendet wurde, wird die Rekursion fortgesetzt
last = a[i];
cur[idx] = a[i];
//Backtracking-Methode
used[i] = true;
print_comb(idx + 1);
used[i] = false;
}
}
}
public void go() wirft FileNotFoundException { // Methodenkörper implementieren }
{
Scanner in = new Scanner(new File("data.in")); Die Syntax besteht darin, ein Scannerobjekt mit dem Namen in zu erstellen, das zum Lesen von Eingaben aus der Datei mit dem Namen data.in verwendet wird.
//Daten lesen und sortieren
n = in.nextInt();
a = new int[n];
for (int i = 0; i
Arrays.sort(a);
//Hilfsvariablen initialisieren und vollständige Anordnung ohne Duplizierung starten
cur = new int[n];
used = neuer boolean[n];
for(int i = 0; i
print_comb(0);
in.close();
}
public static void main(String[] args) löst FileNotFoundException { Dies ist die Hauptmethode in einem Java-Programm, mit der der Programmeintrag gestartet wird. Mit dieser Methode können wir einige Vorgänge ausführen, z. B. das Lesen von Dateien, das Verarbeiten von Daten usw. Unter diesen gibt die Funktion „FileNotFoundException“ an, dass während der Ausführung eine Ausnahme „Datei nicht gefunden“ auftreten kann. Wenn diese Ausnahme auftritt, löst das Programm eine Ausnahme „FileNotFoundException“ aus. Bei dieser Methode können Sie spezifische Codelogik schreiben, um das Lesen von Dateien und die Ausnahmebehandlung zu verarbeiten.
new Main().go();
}
} Objektiv gesehen sind nicht rekursive und sich nicht wiederholende vollständige Permutationen relativ einfach und effizient.
Die Rolle der Rekursion: Rekursive Algorithmen können einige durch Rekursion definierte Probleme lösen.
Zuerst müssen wir verstehen, was das Problem der rekursiven Definition ist. Einfach ausgedrückt ist ein rekursiv definiertes Problem ein großes Problem, das kleinere Probleme mit derselben Struktur, aber kleinerer Größe enthält.
Zum Beispiel kann die Definition von n Fakultät wie folgt verstanden werden:
n!= n*(n-1)!
Aus der obigen Analyse lässt sich leicht schließen, dass (n-1) ein kleineres Problem ist als n!. Durch die kontinuierliche Zerlegung des Problems nach dieser Methode können wir einige grundlegende bekannte Daten erhalten. Dann können wir durch umgekehrte Ableitung das Endergebnis erhalten.
Der faktorielle Algorithmus von
n lautet wie folgt:private static int jieCheng(int n) { Dies ist eine Methode zur faktoriellen Berechnung, bei der der Parameter n den zu berechnenden Wert darstellt. Nachfolgend eine ausführliche Erläuterung: - „privat“ bedeutet, dass die Methode nur in der aktuellen Klasse sichtbar ist und nicht von anderen Klassen aufgerufen werden kann. - „Statisch“ bedeutet, dass die Methode eine statische Methode ist und direkt über den Klassennamen aufgerufen werden kann, ohne das Objekt zu instanziieren. - „int“ bedeutet, dass die Methode als Ergebnis einen ganzzahligen Wert zurückgibt. - „jieCheng“ ist der Name der Methode, der nach Bedarf benannt werden kann.
if(n==1)
return 1;
sonst {
return n*jieCheng(n-1);
}
}
Darüber hinaus ist die Definition eines Binärbaums auch rekursiv, was bedeutet, dass viele Binärbaumoperationen durch Rekursion implementiert werden.
Durch die Verwendung von Rekursion wird das Programm recht prägnant.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
publicclassTest {
publicstaticintf(intn){
if(n==20){
return1;
}elseif(n==21){
return4;
}elseif(n
returnf(n+2)-2*f(n+1);
}sonst{
return2*f(n-1)+f(n-2);
}
}
public static void main(String[] args) {
System.out.println(f(10)); //Drucken Sie den Wert von f(10)
}
}
Es wurde getestet. Geben Sie f(n) in die Hauptfunktion ein, wobei n ein manuell angepasster Parameter ist, und das entsprechende Ausgabeergebnis kann erhalten werden.
Das obige ist der detaillierte Inhalt vonIch möchte alle um eine detaillierte Erklärung des rekursiven Algorithmus in Java bitten.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!