Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: FAQ - C (C89, C99 und C11) ::  Was ist ein rekursive Funktion (oder so ähnlich)?     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Speddy Conzales
Mitglied

Benutzerprofil
Anmeldungsdatum: 01.05.2001
Beiträge: 14
Beitrag Speddy Conzales Mitglied 23:10:00 04.01.2001   Titel:   Was ist ein rekursive Funktion (oder so ähnlich)?            Zitieren

Hi!
Ich hoffemal, daß ich hier das richtig Forum erwischt habe.
Meine Frage:
Was ist ein rekursive Funktion/Procedure?
Könntet ihr mir dazu einen Quelltext (C) posten oder erklären was das ist?
Danke im voraus [img]http://www.c-plusplus.de/ubb/ubb/smile.gif[/img].
Werbeunterbrechung
Bahal
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.08.2002
Beiträge: 3
Beitrag Bahal Mitglied 23:27:00 04.01.2001   Titel:              Zitieren

Eine rekursive Funktion ist eine Funktion die sich, in ihrem Verlauf selbst wieder
aufruft (mit anderen Werten).
Bsp:

void funktion (...)
{
... blabla...
funtion(...);
}

Ciao
Bahal

Fux
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.05.2001
Beiträge: 931
Beitrag Fux Mitglied 01:05:00 05.01.2001   Titel:              Zitieren

Was Bahal gesagt hat ist richtig. Ich will dir nur noch einen Link auf Volkard Kurs mitgeben. Dort hast du auch gleich den Klassiker - die Fakultät. http://www.c-plus-plus.de/rekursion.html
CU

[Diese Nachricht wurde von Fux am 05-01-2001 editiert.]
Seppel
Mitglied

Benutzerprofil
Anmeldungsdatum: 01.05.2001
Beiträge: 77
Beitrag Seppel Mitglied 17:56:00 05.01.2001   Titel:              Zitieren

Hallo,

wirklich sinnvoll ist der rekursive Aufruf aber nur bei "Baeumen". So z.B. bei Iterationen (Fakultaet kriegt man ja auch anders hin).
Stell dir vor, du willst einen Baum malen der folgender massen aussieht:

Stamm... dann kommt eine Verzweigung -> 2 Aeste...
an jedem Ast wieder eine Verzweigung -> wieder pro Ast 2 neue Aeste ... usw.

Willst du jetzt einen solchen Baum mit bspw. 5 Iterationen/Stufen malen, so geht das nur sehr schlecht hintereinander zu machen (versuche es einmal... wo faengt man an?).
Genau an dieser Stelle hilft dir die Rekursion:
1. du schreibst einfach eine Funktion, die dir an einen "Grundast" eine Verzweigung und 2 Aeste malen kann: aeste_malen(Grundast);
2. dann rufst sich dieselbe Fkt. selbst fuer die beiden neuen Unteraeste auf.
3. Gestartet wird die Rekursion mit dem Stamm
4. Abbruchbedingung nicht vergessen!
(bspw. die Astdicke, wenn sie jedesmal bei einer Verzweigung veringert wird)

Pseudocode:

void aeste_malen(Grundast)
{
-1.Zweig an den Grundast anmalen
-2.Zweig an den Grundast anmalen

wenn Abbruchbedingung nicht erfuellt:
{
-aeste_malen(1.Zweig);
-aeste_malen(2.Zweig);
}
}

void main()
{
...
aeste_malen(Stamm);
...
}

(ich hoffe das war jetzt irgendwie verstaendlich [img]http://www.c-plusplus.de/ubb/ubb/wink.gif[/img] ?)

Eine richtige Anwendung ist aber nicht das malen von Baeumen sondern z.B. Fraktale in verschiedenen Iterationsstufen...

Wenn du daran Interesse hast, schreib' einfach noch einmal...

Tschuess, Seppel.
Knollo
Mitglied

Benutzerprofil
Anmeldungsdatum: 21.06.2000
Beiträge: 30
Beitrag Knollo Mitglied 01:38:00 06.01.2001   Titel:              Zitieren

Tach
Ne andere cool Anwendung von solch Funktionen ist eine Explosion im Kultspiel Bomberman. Wenn eine Bombe explodiert lößt sie in der Nähe befindliche Bomben mit aus. Dazu muss die Umgebung abgecheckt werden und das von jeder ausgelösten Bombe aus. Ohne Rekursion to mein mind unmöglich.

------------------
www.knollo.purespace.de
class CMarcus
Unregistrierter




Beitrag class CMarcus Unregistrierter 11:58:00 06.01.2001   Titel:              Zitieren

Zitat:
Original erstellt von Knollo:
Wenn eine Bombe explodiert lößt sie in der Nähe befindliche Bomben mit aus. Dazu muss die Umgebung abgecheckt werden und das von jeder ausgelösten Bombe aus. Ohne Rekursion to mein mind unmöglich.



DAS ist in der Tat mal ein sehr gutes Beispiel für eine Rekursion. Danke für den Hinweis, das werde ich mir merken.

Dennoch eine Anmerkung: jede rekursive Funktion läßt sich so umschreiben, daß man das Problem rein iterativ löst. Meistens ist dazu eine Hilfsdatenstruktur (Liste, Stack) notwendig. Man kann sowohl die Fakultät als auch einen Baumdurchlauf durchaus nicht-rekursiv programmieren. Allerdings ist die rekursive Lösung oftmals kürzer und intuitiver verständlich.



------------------
Viele Grüße

Marc++us

Besucht die C/C++-Ecke
http://www.c-plusplus.de
Speddy Conzales
Mitglied

Benutzerprofil
Anmeldungsdatum: 01.05.2001
Beiträge: 14
Beitrag Speddy Conzales Mitglied 14:04:00 07.01.2001   Titel:              Zitieren

Ein ganz großes Dankeschön an alle [img]http://www.c-plusplus.de/ubb/ubb/smile.gif[/img].
Ihr habt mir richtig gut geholfen [img]http://www.c-plusplus.de/ubb/ubb/smile.gif[/img].
THX & Thumps up für dieses Board...
c++.de :: FAQ - C (C89, C99 und C11) ::  Was ist ein rekursive Funktion (oder so ähnlich)?   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.