Hey,
ich bin grade dabei mich mit Rekursion zu beschäftigen. Folgende rekursive Methode quadriert eine Matrix:
die Methode mult hilft dabei:
Nun meine Frage: Kann man die Methode exp() denn auch in eine iterative Variante umwandeln? Man muss doch exp() trotzdem immer aufrufen, oder? Da das Ganze ja auf der Überlegung A^n = (A^2)^n/2 basiert. Falls nötig kann ich auch meien ganzen Quellcode posten.
Danke schonmal, LG Susi
ich bin grade dabei mich mit Rekursion zu beschäftigen. Folgende rekursive Methode quadriert eine Matrix:
Code:
//Matrix potenzieren
static Matrix exp(Matrix a, int n) {
if (n == 1) {
return a;
}
if (n % 2 == 0) {
return exp(a.mult(a), n/2);
}
return a.mult(exp(a.mult(a), (n-1)/2));
}
die Methode mult hilft dabei:
Code:
Matrix mult(Matrix b) {
int m = this.anzahlZeilen(); // Anzahl Zeilen
int n = this.anzahlSpalten(); // Anzahl Spalten
int mb = b.anzahlZeilen(); // Anzahl Zeilen in b
int nb = b.anzahlSpalten(); // Anzahl Spalten in b
if (n != mb) {
return null; // Dimensionen nicht passend
}
// (m x nb) - Ergebnismatrix c erzeugen
// und Multiplikation durchführen
Matrix c = new Matrix(m, nb);
for (int i = 0; i < m; i++) {
for (int j = 0; j < nb; j++) {
int summe = 0;
for (int k = 0; k < n; k++) {
summe = summe + this.elemente[i][k]*b.elemente[k][j];
}
c.elemente[i][j] = summe;
}
}
return c;
}
Nun meine Frage: Kann man die Methode exp() denn auch in eine iterative Variante umwandeln? Man muss doch exp() trotzdem immer aufrufen, oder? Da das Ganze ja auf der Überlegung A^n = (A^2)^n/2 basiert. Falls nötig kann ich auch meien ganzen Quellcode posten.
Danke schonmal, LG Susi