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

Informatiker Board » Themengebiete » Theoretische Informatik » Ablauf einer Rekursiven Funktion » 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 10 Beiträge
eulerscheZahl

Die Funktion springt in eine Unterfunktion (in dem Fall in sich selbst) rein und arbeitet diese ab. Danach führt sie sich selbst weiter aus. Wie Klammern, die sich gegenseitig umschließen: {[()]}
Und sowohl bei der öffnenden, als auch bei der schließenden Klammer hast du eine Ausgabe.
Michael90

Danke dir für die Antwort. Also verstehe ich das richtig, dass es folgendermaßen abläuft, dass erst (angenommener Wert = 3) von 3,2,1,0 abläuft und dann wieder 1,2,3 zurückläuft?
eulerscheZahl

Du gibst am Ende wider das a der aufrufenden Funktion aus.
rekursion(3) setzt a auf 2, gibt eine 2 aus, ruft rekursion(2) auf (Ausgabe: 1 0 0 1) und gibt die 2 dann erneut aus.
Michael90

Zu diesem Thema hätte ich auch eine Frage:

Warum wird a am Ende wieder positiv und nicht negativ, also -1,-2,-3,-4 ?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
public class Rekursiv
{
	public static void main(String[] args)
	{
		rekursion(5);
	}
    private static void rekursion(int a)
    {
      	--a;
      	System.out.println(a);
    	if (a!=0) 
    	{
    		rekursion(a);
      	}
    	System.out.println(a); 
    	// Wenn a = 0, dann erfolgt hier die Ausgabe des Wertes 
    	// a wird um eins verringert, somit auf -1,
    	// Warum wird a hier wieder positiv und nicht negativ, also -1,-2,-3,-4 ? 
	}
}
Tina92

Vielen Dank für deine Antwort :-)
eulerscheZahl

Für zahl = 3 ist das Ergebnis: 2 + 3 * versuch(2)
versuch(2) ist 2 + 2 * versuch(1)
versuch(1) ist 2 + 1 * versuch(0)
versuch(0) ist 1, das Ergebnis eingesetzt ergibt versuch(1) = 2+1*1 = 3
versuch(2) = 2+2*3 = 8
versuch(3) = 2+3*8 = 26
Tina92

Hey :-)

Ich muss das Thema leider noch einmal aufgreifen, da ich nicht weiterkomme.

Den folgenden Code habe ich soeben mal schnell geschrieben:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
public class Rekursiv 
{
	public static void main (String[]args)
	{
	System.out.println(versuch(3));	
	}

	public static int versuch(int zahl)
	{
		int ausgabe = 1;
		if (zahl>0)
		{
			ausgabe = 2+zahl*versuch(zahl-1);	
		}
		else
		{
			return 1;
		}
		return ausgabe; 
	}
}



Könnt ihr mir bitte sagen, wie jetzt hier als Ergebnis 26 rauskommt?

Vielen Dank
Tina92

Vielen Dank für deine Antwort.
eulerscheZahl

Das Programm springt immer wieder in eine Unterfunktion.
Ich habe mal ein paar Kontrollausgaben ergänzt:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
public static double fakult(int zahl) {
	if (zahl > 0) {
		System.out.println("      ".substring(zahl) + zahl
				+ " vor rekursivem Aufruf");
		double ergebnis = zahl * fakult(zahl - 1);
		System.out.println("      ".substring(zahl) + zahl
				+ " nach rekursivem Aufruf");
		return ergebnis;
	} else {
		return 1;
	}
}



6 vor rekursivem Aufruf
 5 vor rekursivem Aufruf
  4 vor rekursivem Aufruf
   3 vor rekursivem Aufruf
    2 vor rekursivem Aufruf
     1 vor rekursivem Aufruf
     1 nach rekursivem Aufruf
    2 nach rekursivem Aufruf
   3 nach rekursivem Aufruf
  4 nach rekursivem Aufruf
 5 nach rekursivem Aufruf
6 nach rekursivem Aufruf

Das ist der zeitliche Ablauf: die Funktion ruft sich selbst auf, wartet auch ein Ergebnis der Unterfunktion und gibt dieses dann zurück.
Tina92 Ablauf einer Rekursiven Funktion

Meine Frage:
Hi Leute,

ich hätte mal eine Frage zu den rekursiven Funktionen und wie diese eigentlich genau funktionieren.

Hab als Beispiel einmal die Fakultätsfunktion geschrieben:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:

public class Fakult 
{
	public static void main (String[]args)
	{
		System.out.println(fakult(6)); 
	}

public static double fakult (int zahl)
	{
		if (zahl>0)
		{
			return zahl*fakult(zahl-1);
		}
		else
		{
			return  {1; 
		}
	}
}



Meine Ideen:
Was ich jetzt nicht verstehe, was genau in dieser Zeile passiert:

return zahl*fakult(zahl-1);


Vielen Dank für Eure Hilfe :-)