Wie würden Sie erzeugen ein Sierpinski Dreieck in C (rekursiv)

Ich Frage mich, wie konnte ich generieren ein Sierpinski Dreieck einer bestimmten Tiefe rekursiv in C.

Schrieb ich dieser Funktion erzeugen Sie ein Dreieck mit der Höhe h aus * aus den Koordinaten (x,y) der oberen Punkt.

void triangle(char display[100][100],int x, int y, int h) {

    for (int row = y; row<=h-1+y; row++) {
        for (int column = x; column<=2*(row+1-y)+x-2; column++) {
            display[row][column-(row+1-y)+1] = '*';
        }
    }

    for (int i = 0 ; i<100 ; i++) {
        for (int j = 0; j<100; j++) {
            if (display[i][j]=='\0')
                display[i][j]=' ';
        }
    }



}

Mit diesem code, den ich erzeugen kann "manuell" das Sierpinski-Dreieck. aber ich würde es gerne spielen rekursiv für jede Tiefe und Höhe ( mit Höhe teilbar sein durch 2^(Tiefe)).

int main()
{
    char display[100][100] = { {0} };

    triangle(display, 20, 0, 5);

    triangle(display, 15, 5, 5);
    triangle(display, 25, 5, 5);

    triangle(display, 10, 10, 5);
    triangle(display, 30, 10, 5);

    triangle(display,  5, 15, 5);
    triangle(display, 15, 15, 5);
    triangle(display, 25, 15, 5);
    triangle(display, 35, 15, 5);


    for (int i=0 ; i<100; i++) {
        printf("\n");
        for (int j=0; j<100; j++) {
            printf("%c", display[i][j]);
        }
    }
}

Dies ist mein Ausgang für den obigen code:

Wie würden Sie erzeugen ein Sierpinski Dreieck in C (rekursiv)

  • Rekursiv bedeutet, dass die Funktion sich selber aufruft. Anstatt also alle diese Aufrufe zu Dreieck() in der main, warum haben nicht die Dreieck-Funktion erhöhen Sie dessen Argumente und dann... warten Sie... call Dreieck()!!
  • Die Sache ist, dass ich nicht weiß, wie finden Sie die top-Punkte für jedes Dreieck für jede gegebene Tiefe
  • Sie soll gesagt haben, dass in Ihrer Frage. Wie geschrieben, es liest sich wie: "bitte meine Hausaufgaben für mich." Eine Idee, die Federn sofort in den Sinn, ist ein zusätzliches argument für die Dreieck-Funktion, die aufgerufen wird depth. Call Dreieck() zunächst (von außen Dreieck()) mit einer Tiefe von 0, und aus dem inneren Dreieck nennen es rekursiv mit ++depth als depth argument. Wenn depth % h null ist, wissen Sie, Sie sind an der Spitze eines Dreiecks.
InformationsquelleAutor John Graig | 2015-10-15
Schreibe einen Kommentar