von rekursiv zu iterativ

Status
Nicht offen für weitere Antworten.

BlueDolphin

Mitglied
Hey,

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
 
B

bygones

Gast
natürlich kann man die methode auch iterativ umschreiben, einen aufruf von exp wäre aber falsch, da du ja dann wieder ins rekursive kommst.
 
B

bygones

Gast
for oder while schleife die n runterzählt...

es gibt 3 möglichkeiten
n = 1 - das ist das ende der Iteration
n % 2 == 0 bzw. n % 2 !=0 - da dann die jeweilge berechnungen
 

BlueDolphin

Mitglied
erstmal danke für die Antworten...aber ich muss nochmal nerven :roll:

um a^n iterativ zu berechnen muss ich die Matrix ja "nur" in der Schleife immer *a rechnen, d.h.

a^2 = a.mult(a)
a^3 = (a.mult(a)).mult(a)
a^4 = ((a.mult(a)).mult(a)).mult(a)

das Problem ist ja nun, dass a nach dem ersten a.mult(a) zu a^2 wird und somit beim nächsten aufruft von mult() a^2*a^2 gerechnet wird, d.h. a wird immer überschrieben

ich habe das nun so gelöst, dass ich eine Hilfsmatrix b anlege, die die selben Startwerte enthält wie Matrix a
so funktioniert das Ganze zwar, aber zweckmässig ist das wohl nicht:



Code:
Matrix exp2(Matrix a, int n) {
		
		int x = 2;
		int y = 2;
		
		Matrix b = new Matrix (x,y);
		b.elemente[0][0] = 3;
		b.elemente[0][1] = 8;
		b.elemente[1][0] = 9;
		b.elemente[1][1] = 0;
		
		for (int i = n; i > 1; i--) {
		
			if (i == 1) {
			
				a = a;
			}
			
			if (i % 2 == 0) {
				
				a = a.mult(b);
			}
			
			if (i % 2 != 0) {
				
				a = a.mult(b);
			}
		}
		return a;
}

Wie kann ich das Lösen, ohne die Hilfsmatrix verwenden zu müssen?

Danke für die Hilfe
 

master099

Mitglied
nur mit mult() und der einen Matrix funktioniert das nicht

a^2 = a.mult(a)
a^3 = (a.mult(a)).mult(a)
a^4 = ((a.mult(a)).mult(a)).mult(a)

passt ja soweit müsstest du nur in der for-schleife sagen, dass jedesmal ein .mult(a) angehängt wird, aber wie das geht weiß ich auch net :bahnhof:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
jhCDtGVjcZGcfzug Fibonacci Zahlen rekursiv und iterativ Java Basics - Anfänger-Themen 21
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
F Iterativ in Rekursiv Java Basics - Anfänger-Themen 2
E Binärbaum - von rekursiv zu iterativ Java Basics - Anfänger-Themen 10
S java rekursiv iterativ hilfee :s Java Basics - Anfänger-Themen 5
P Hanoi rekursiv zu iterativ umbauen Java Basics - Anfänger-Themen 20
W Binomialkoeffizient iterativ/rekursiv Java Basics - Anfänger-Themen 2
J Java Rekursiv vs(zu) Iterativ Hilfe Java Basics - Anfänger-Themen 3
F Sortieralgorithmus von rekursiv auf iterativ? Java Basics - Anfänger-Themen 21
N Fibo Zahlen:iterativ,rekursiv Anzahl der Additionen zählen Java Basics - Anfänger-Themen 2
I Iterativ <-> Rekursiv in Java Java Basics - Anfänger-Themen 11
H Passwort Brute Force rekursiv Java Basics - Anfänger-Themen 7
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
R0m1lly Kombinationen aus int array rekursiv Java Basics - Anfänger-Themen 2
L Rekursiv gegebenes Passwort herausfinden. Java Basics - Anfänger-Themen 2
P9cman Char Index rekursiv finden Java Basics - Anfänger-Themen 4
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
S Methoden Methodenaufruf rekursiv zählen Java Basics - Anfänger-Themen 4
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
sashady Zahlen rekursiv zerlegen und Ziffern addieren Java Basics - Anfänger-Themen 38
H Binominalkoeffizient tail-rekursiv in java darstellen Java Basics - Anfänger-Themen 0
GAZ Tribonacci Folge Rekursiv Java Basics - Anfänger-Themen 11
A Ackermmanfunktion rekursiv Java Basics - Anfänger-Themen 4
A Binärbaum rekursiv durchsuchen und Referenz zurückgeben Java Basics - Anfänger-Themen 4
H Rekursiv Methode ausführen bei Kindern Java Basics - Anfänger-Themen 12
G Methode Rekursiv umschreiben Java Basics - Anfänger-Themen 8
L Jede zweite Ziffer entfernen (rekursiv) Java Basics - Anfänger-Themen 6
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
D Pentagonale Nummern in Rekursiv Java Basics - Anfänger-Themen 14
O Enum Array Rekursiv abarbeiten Java Basics - Anfänger-Themen 44
E Weg-Suche-Problem rekursiv Java Basics - Anfänger-Themen 12
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
E Erste Schritte Potenz Negativ (rekursiv) Java Basics - Anfänger-Themen 2
O Rekursiv aufrufen Java Basics - Anfänger-Themen 2
F In List Rekursiv suchen Java Basics - Anfänger-Themen 12
S Fibonacci Zahlen rekursiv Java Basics - Anfänger-Themen 1
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
B Fakultätsfunktion Rekursiv Berechnen aber mit Array Java Basics - Anfänger-Themen 10
J Fibonacci -Folge rekursiv berechnen Java Basics - Anfänger-Themen 18
B Wie kann ich Linien rekursiv zeichnen? Java Basics - Anfänger-Themen 4
kilopack15 Sin(x) rekursiv lösen Java Basics - Anfänger-Themen 17
T Rekursiv Tiefe eines binären Suchbaums ermitteln Java Basics - Anfänger-Themen 22
P Methoden Arrays.AsList kleinste Zahl ausgeben Rekursiv Java Basics - Anfänger-Themen 9
W A hoch N Rekursiv Java Basics - Anfänger-Themen 3
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
V Quadrate rekursiv zeichnen Java Basics - Anfänger-Themen 7
M Fibonacci rekursiv mittels Cache Java Basics - Anfänger-Themen 17
Y Rekursiv Palindrom herausfinden Java Basics - Anfänger-Themen 5
B Fibonacci Zahlen rekursiv Array Java Basics - Anfänger-Themen 12
M String rekursiv Spiegeln mit Originalwort davor Java Basics - Anfänger-Themen 3
K Türme von Hanoi - Rekursiv. Java Basics - Anfänger-Themen 1
T MergeSort rekursiv programmieren Java Basics - Anfänger-Themen 8
M Zahlenpyramide rekursiv programmieren Java Basics - Anfänger-Themen 7
hello_autumn Potenz selber berechnen, Rekursiv. Java Basics - Anfänger-Themen 6
V Text wüerfeln-Rekursiv Java Basics - Anfänger-Themen 4
J Baum rekursiv durchlaufen Java Basics - Anfänger-Themen 2
D Münzverteilung Möglichkeiten | Rekursiv Java Basics - Anfänger-Themen 3
R Hanoi rekursiv lösen Problem Java Basics - Anfänger-Themen 1
D Rekursiv Kombinationen ausgeben klappt nur bei einer Wiederholung Java Basics - Anfänger-Themen 4
shiroX OOP String rekursiv zurückgeben Java Basics - Anfänger-Themen 6
Z Fibonacci rekursiv meine Erklärung stimmt so? Java Basics - Anfänger-Themen 2
E Erste Schritte Pi, rekursiv Java Basics - Anfänger-Themen 6
A Frage Methode ggt Rekursiv Java Basics - Anfänger-Themen 5
E Hanoi-Varianten rekursiv Java Basics - Anfänger-Themen 2
P Mittelwert rekursiv Java Basics - Anfänger-Themen 13
E Integral Rekursiv Java Basics - Anfänger-Themen 15
M MergeSort rekursiv Java Basics - Anfänger-Themen 2
D Ziffer in Zahl Rekursiv Java Basics - Anfänger-Themen 4
B Array rekursiv untersuchen Java Basics - Anfänger-Themen 21
I Rekursiv Java Basics - Anfänger-Themen 13
C Rekursiv Zahlenfolgen berechnen mit zwei Variablen Java Basics - Anfänger-Themen 5
K Rekursiv zu Literal Java Basics - Anfänger-Themen 12
R Verzeichnisse rekursiv nach Dateiduplikaten durchsuchen Java Basics - Anfänger-Themen 5
L File Tree rekursiv Java Basics - Anfänger-Themen 10
X Addition rekursiv ohne Schleife Java Basics - Anfänger-Themen 10
M Sudoku Rekursiv lösen Java Basics - Anfänger-Themen 9
E Datentypen ein java problem rekursiv loesen Java Basics - Anfänger-Themen 2
K indexOf selbst rekursiv definieren Java Basics - Anfänger-Themen 4
M Fibonacci-Linear und Rekursiv Java Basics - Anfänger-Themen 14
D preOrder, inOrder, postOrder rekursiv zusammensetzen aus String Java Basics - Anfänger-Themen 1
K Binomialkoeffizient rekursiv berechnen Java Basics - Anfänger-Themen 8
J eulersche rekursiv berechnen Java Basics - Anfänger-Themen 6
J Suchbaumeigenschaft rekursiv programmieren Java Basics - Anfänger-Themen 3
T Rekursiv Vokale zählen Java Basics - Anfänger-Themen 19
G Bestimmte Ebene eines Baumes rekursiv ausgeben Java Basics - Anfänger-Themen 49
G Sudoku rekursiv lösen Java Basics - Anfänger-Themen 10
S Stringlänge Rekursiv ermitteln Java Basics - Anfänger-Themen 2
dognose Verzeichnis rekursiv auslesen / beschränkte Apis. Java Basics - Anfänger-Themen 6
0 a hoch b rekursiv - wie stoppen? Java Basics - Anfänger-Themen 3
T Ordnerstrucktur rekursiv auslesen Java Basics - Anfänger-Themen 9
G Rekursiv die größte Zahl eines Arrays Java Basics - Anfänger-Themen 6
G Rekursiv Array Elemente quadrieren Java Basics - Anfänger-Themen 2
P Permutationen einer Tour rekursiv Java Basics - Anfänger-Themen 4
G Baumstruktur rekursiv durchlaufen Java Basics - Anfänger-Themen 2
B Kürzesten Weg zwischen mehreren Punkten finden (rekursiv) Java Basics - Anfänger-Themen 5
L Kombinationen einer Menge rekursiv berechnen Java Basics - Anfänger-Themen 11
J BinBaum rekursiv ausgeben Java Basics - Anfänger-Themen 9
W Rekursiv Zeichen einfügen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben