Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Rekursion in Iterativ umstellen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Rekursion in Iterativ umstellen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
zitrone
unregistriert
Rekursion in Iterativ umstellen Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Hallo Leute kann mir jemand vielleicht mit der Umstellung der Methode helfen
public static int tuwas2(int n) {
return (n==0) ? 0 : 1+2*tuwas2(n-1);
}
Vielen Dank im Voraus

Meine Ideen:
Ich hab es so versucht aber klappt leider nicht
public static int tuwas2ite(int n) {
int erg=1;
for(int i=1;i<n;i++) {
erg+=2*i;
}
return erg;
}
13.08.2017 00:55
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Also, ich würde erstmal das erg mit 0 initialisieren.
Dann ist die Rechnung doch eine andere: Da wo in der Iteration tuwas2(n-1) in der Formel steht, das ist ja in der Schleife noch der vorhergehende Wert von erg. Du kannst also einfach schreiben:
code:
1:
erg = 1+2*erg

Das i kommt ja so gar nicht mehr in der Formel vor.

Was passiert dann?

Gruß
Marco
13.08.2017 12:28 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
zitrone
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Vielen Dank für die Antwort, ich hab das so gemacht und es funktioniert

public static int tuwas2ite(int n)
{
int erg=0;
while(n>0)
{
erg=1+2*erg;
n--;
}
return erg;
}
13.08.2017 17:22
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich weiß nicht, warum Du jetzt unbedingt rückwärts zählen willst. In diesem speziellen Fall funktioniert das zwar auch, aber das muss so nicht immer richtig sein.

Du solltest eher das hier verwenden:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
public static int tuwas2ite(int n) {
	int erg=0;
	for(int i=0;i<n;i++) {
		erg = 1+2*erg;
	}
	return erg;
}


Im Allgemeinen kann man eine Rekursion immer so auflösen: Man implementiert einen eigenen Stack. pusht die Werte drauf, so wie die Funktion rekursiv auch aufgerufen wird und am Ende der Rekursion arbeitet man den Stack wieder ab. Bei Deinem Bsp. ist es so, dass die Funktion immer wieder rekursiv mit n-1 aufgerufen wird. Wenn ich also den Stack anschaue, wenn der Rekursionsabbruch stattfindet (wenn also die Funktion mit dem Wert 0 aufgerufen wird), dann habe ich alle Zahlen von 0 bis n auf dem Stack.
Im Anschluss wird die Rekursion zurück abgearbeitet und zwar mit den Zahlen von 0 bis n (und zwar in dieser Reihenfolge und nicht so wie Du es gemacht hat von n nach unten, überleg Dir das nochmal genau!)

Gruß
Marco
13.08.2017 22:32 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
zitrone
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Okay alles klar, vielen Dank für die Hilfe smile
14.08.2017 17:36
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Rekursion in Iterativ umstellen