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

Informatiker Board » Themengebiete » Praktische Informatik » Rekursion in Iterativ umstellen » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 5 Beiträge
zitrone

Okay alles klar, vielen Dank für die Hilfe smile
as_string

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
zitrone

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;
}
as_string

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
zitrone Rekursion in Iterativ umstellen

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;
}