PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rekursion


MastaEda
26.04.2002, 19:59
Guten Abend!
Ich sitze hier nun schon 2 Stunden und komm einfach nicht dahinter!!!

#include <stdio.h>
#include <string.h>
#include <iostream.h>

void foo(char word[],int index,int length)
{
static int calls = 0;
calls++;
if(index >=length)
{
return;
}

printf(&quot;\n %3d und %c; &quot;, calls, word[index]);
foo(word, index+1,length);
foo(word,index+1,length);
return;
}


int main(void)
{
char text[100];
printf(&quot;\nWort eingeben: &quot;);
gets(text);
foo(text,0,strlen(text));

int warte;
cin >> warte;
return 0;
}



Ich versuche schon die ganze Zeit herauszufinden in welcher Reihenfolge die beiden foos und ihre weiteren Rekursionen abgearbeitet werden.
Ich wäre sehr verbunden, wenn mir das jemand Schritt für Schritt erklären könnte.


xOOn
26.04.2002, 20:18
cooler effekt das muss man schon sagen!! also ob man das noch rekursion heissen kann ( :D :D )

naja er fuehrt zuerst alle foos aus (die 1. foo zeile), bis irgenwann index >= lengh, dann kommt das return und es wird das 2. foo im dem index == lenght -1 ausgefuehrt, das fuehrt ebenfalls sofort zum abbruch und das wars!
nun wirds lustig. das 2. foo index == lengh -2, wird ausgefuehrt, dies fuehrt das 1.foo aus bis zum return, dann wird das 2. foo ausgefuehrt

und dann wirds kompziert weil sich das alles schachtelt

also grafisch weil den text kapiert sowieso niemand

1. foo wird lengh mal ausgefuehrt
dann 2. foo (index == lenght -1)
dann 2.foo (index == lengh -2)
--dann 1. foo (index == lenght -1)
--dann 2. foo (index == lenght -1)
dann 2.foo (index == lenght - 3)
--dann 1.foo (index == -2)
----dann 1.foo (index == -1)
----dann 2.foo (index == -1)
--dann 2.foo (index == lengh -2)
----dann 1. foo (index == lenght -1)
----dann 2. foo (index == lenght -1)

und immmer so weiter ich hoffe ich habe mich nicht irgenwo vertan!
und kannste mirr verraten wie man auf so verrueckte ideen kommt :mauer: :mauer: :mauer:

MastaEda
26.04.2002, 21:00
Danke! Das werd ich mal durcharbeiten und hoffen dass ichs versteh!

Bin 1.Semester Informatik und das is ne Aufgabe in Programmieren1 wie se in der Prüfung drankommen könnte. Gefragt wären dann die ersten 5 Zeilen Ausgabe bei Eingabe &quot;ABC&quot; und eine Formel für die Anzahl der Zeilen in Abhängigkeit der Länge der Eingabe.

xOOn
26.04.2002, 21:50
also bei der eingabe ABC

kommt
0...A
1...B
2...C
und nun wirds lustig
3...C
4...B

hehe scheint sogar einen sinn zu ergeben die funktion :D :D

MastaEda
26.04.2002, 22:00
nicht ganz
da kommt dann
1 und A
2 und B
3 und C
6 und C
9 und B
10 und C
13 und C

seltsam, seltsam 8o

xOOn
26.04.2002, 22:27
da hast du recht :D ;) ;) ;)

MastaEda
27.04.2002, 14:47
warum wird das 2.foo mit index=length - 1 ausgeführt?

warum wird das 2.foo überhaupt ausgeführt?
er müsste doch einfach in die main funktion zurückspringen wenn index>=length und beenden

;(

xOOn
28.04.2002, 17:10
mit return springt er immer nur eine ebene raus und nicht alle ebenen

Bolle
29.04.2002, 19:25
void foo(char word[],int index,int length)
{
static int calls = 0;
calls++;
if(index >=length)
{
return;
}

printf(&quot;\n %3d und %c; &quot;, calls, word[index]);
foo(word, index+1,length);
return;
}
also wenn ich dein prob richtig verstanden hab, sollte das funktionieren.
hoff ich doch... bei mit tut es das.
btw wieso eigentlich keine schleife? is rekursion schneller oder wie?

xOOn
30.04.2002, 09:13
@Bolle nein aber viele dinge lassen sich nur mit rekursion loesen, zb suchen einer datei und C:\ und darunter