Entwickler-Ecke

Algorithmen, Optimierung und Assembler - habe ich eine Rekursion gemacht?


Namenlosnameless - Mi 02.02.11 00:00
Titel: habe ich eine Rekursion gemacht?
Hallo!

Ich wollte mich mit dem Thema Rekursion vertraut machen, da ich oft davon lese es aber noch nie probiert habe!
Dabei bin ich auf Fraktale gestoßen ;D
Das Prinzip einer Rekursion habe ich prinzipiell verstanden, jedoch weiß ich nicht ob ich bei folgendem Programm auch mittels einer Rekursion gearbeitet habe...


Hier mal meine Main-Form

C#-Quelltext
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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Fraktal
{
    public partial class Form1 : Form
    {
        private List<Dreieck> dreiecke = new List<Dreieck> {};
        private List<List<Dreieck>> letzteDreiecke = new List<List<Dreieck>> { };

        Dreieck erstesDreieck = new Dreieck(new Point(5010), new Point(55010), new Point(300500));
        public Form1()
        {
            InitializeComponent();
            dreiecke.Add(erstesDreieck);
            letzteDreiecke.Add(dreiecke);
        }
        private void manageDreiecke()
        {
                List<Dreieck> neueDreiecke = new List<Dreieck> { };
                foreach (Dreieck dreieck in dreiecke)
                {
                    dreieck.Cut();
                    neueDreiecke.Add(dreieck.dreieck1);
                    neueDreiecke.Add(dreieck.dreieck2);
                    neueDreiecke.Add(dreieck.dreieck3);
                }

                dreiecke = neueDreiecke;
                this.Refresh();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.FillPolygon(new SolidBrush(Color.Black),new Point[]{erstesDreieck.A,erstesDreieck.B,erstesDreieck.C});

            Brush brush = new SolidBrush(Color.White);
            foreach (Dreieck dreieck in dreiecke)
            {
                Point[] points =new Point[3] { 
                dreieck.A,
                dreieck.B,
                dreieck.C};

                e.Graphics.FillPolygon(brush, points, System.Drawing.Drawing2D.FillMode.Winding);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            letzteDreiecke.Add(dreiecke);
            manageDreiecke();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            dreiecke = letzteDreiecke[letzteDreiecke.Count-1];
            dreiecke.RemoveAt(letzteDreiecke.Count - 1);
            this.Refresh();
        }
    }

   
}


und die Klasse Dreieck:

C#-Quelltext
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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace Fraktal
{
    class Dreieck
    {
        public Point A, B, C;
        
        public Dreieck dreieck1,
                       dreieck2,
                       dreieck3;

        public Dreieck(Point a,Point b,Point c)
        {
            A = a;
            B = b;
            C = c;
        }
        public void Cut()
        {
            Point AB;
            Point BC;
            Point CA;

            AB = new Point((A.X + B.X) / 2, (A.Y + B.Y) / 2);
            BC = new Point((B.X + C.X) / 2, (B.Y + C.Y) / 2);
            CA = new Point((C.X + A.X) / 2, (C.Y + A.Y) / 2);

            

             dreieck1 = new Dreieck(A, AB, CA);
             dreieck2 = new Dreieck(AB, B, BC);
             dreieck3 = new Dreieck(CA, BC, C);
        }
    }
}


Ich bin mir acht nicht sicher ob es sich hierbei um eine Rekursionn handelt, da ich ja eigentlich keine Methode in sich selber aufrufe oder?

Um die "Funktion" (falls es überhaupt eine hat), des Programms zu zeigen habe ich die .exe Datei hochgeladen!

mfg Namenlosnameless


F34r0fTh3D4rk - Mi 02.02.11 00:15

Sicher, dass du Regression meinst? Ich glaube was du vor hast, ist eine Suche in Wikipedia REKURSION.
Und nein, du führst nirgends eine Rekursion durch, aus dem von dir genannten Grund. Wobei eine indirekte Rekursion dennoch möglich wäre.


Namenlosnameless - Mi 02.02.11 00:22

ja! verdammt ich meine Rekursion ;D

ich hab heute den ganzen tag verdammte regressionsgeraden durch viele Punkte gezeichnet, mit dem Taschenrechner berechnet und das ca 5 stunden lang!
Ich bin wohl etwas geschädigt in der hinsicht ;D