|
|
|
@Lars, da er "Neuling in der objektorientierten Programmierun" ist, hat er vieleicht nicht verstanden was eine Rekursion ist oder wozu man sie gebrauchen kann?!
– Floyd 17.09.2009
|
|
|
//Quelle Wikipedia: http://de.wikipedia.org/wiki/Rekursion
// Absatz: "Programmierbeispiel II, Fakultätsberechnung"
fakultät_rekursiv(n)
{
wenn n <= 1
dann return 1
sonst return ( n * fakultät_rekursiv(n-1) )
}
//Quelle Wikipedia: http://de.wikipedia.org/wiki/Rekursion Absatz:
// Absatz: "Programmierbeispiel II, Fakultätsberechnung"
fakultät_iterativ(n)
{
fakultät = 1
faktor = 2
solange faktor <= n
{
fakultät = fakultät * faktor
faktor = faktor + 1
}
return fakultät
}
|
|
public int Fakultät(int n)
{
if (n <= 1)
return 1;
return n * Fakultät(n - 1);
}
|
|
public int Fib(int i)
{
if (i < 0) throw new ArgumentException("Fib ist für negative Zahlen nicht definiert!");
if (i == 0 || i == 1) return 1;
return Fib(i-1) + Fib(i-2);
}
funktion Unterordner(string root, TreeNode rootNode)
{
List<string> unterordner = HoleUnterordner(root);
foreach (string o in unterordner)
{
neuerKnoten = ErzeugeNodeIn(rootNode, o);
Unterordner(o, neuerKnoten);
}
}
|
|
|
Die Sache mit den Ordner und Unterordner ist ein sehr gutes Beispiel. Wieso bin ich da nicht drauf gekommen :D
– Floyd 18.09.2009
|
||
|
Ein rekursiver Algorithmus lässt sich leichter erstellen als ein iterativer. Hast du das verwechselt? ZB dein Beispiel mit dem Unterordner (das ich auch gut finde) würde mir schwer fallen iterativ zu lösen, rekursiv ist es trivial.
– gfoidl 18.09.2009
|
||
DirectoryInfo basedir = new DirectoryInfo("C:");
Queue<DirectoryInfo> qListSubFolders = new Queue<DirectoryInfo>();
qListSubFolders.Enqueue(basedir);
while (qListSubFolders.Count>0) {
DirectoryInfo subFolderDir = qListSubFolders.Dequeue();
Console.WriteLine(subFolderDir.FullName);
if(subFolderDir.GetDirectories().Length > 0)
foreach (DirectoryInfo sF in subFolderDir.GetDirectories())
qListSubFolders.Enqueue(sF);
}
|
|
|
Durch Queue/Stack wird die Rekursion nur verlagert - meiner Anschauung nach, obwohl die Methode nicht mehr rekursiv aufgerufen wird.
Aber schöne Lösung! – gfoidl 20.09.2009
|
|
|
| 1 | ||
| 1 |
Ich werde ja nicht müde zu erwähnen, dass dies kein Forum ist - es macht also keinen Sinn, als Fragesteller selbst auch eine Antwort zu posten, weil diese durch Auf- und Abwertungen nicht an der Stelle bleibt, wo man sie gepostet hat. Also bitte: nicht selbst antworten, sondern ggf. editieren der Frage oder Kommentar!!
– balu 18.09.2009
|
Eine Rekursion kann natürlich auch unter C#, sowie auch unter anderen Sprachen Sinn machen.