2017-05-01 9 views
-3

Wie schreibe ich eine Pyramide von Sternen in. TXT-Datei mit einer rekursiven Funktion in C? Beispiel für ein Dreieck Pyramide Sternmuster von 5 Zeilen Programm Ausgabe sollte:Pyramid Sternmuster Programme in C mit Rekursion

* 
    *** 
    ***** 
******* 
********* 

Ich habe das nicht-rekursive:

#include <stdio.h> 

int main(void){ 
    int i, space, rows, star = 0; 
    printf("Enter the number of rows\n"); 
    scanf("%d", &rows); 
    //printing one row in every iteration 
    for(i = 1; i <= rows; i++){ 
     /* Printing spaces */ 
     for(space = 1; space <= rows - i; space++){ 
      printf(" "); 
     } 
     //Printing stars 
     while(star != (2 * i - 1)){ 
      printf("*"); 
      star++; 
     } 
     star = 0; 
     //move to next row 
     printf("\n"); 
    } 
    return 0; 
} 

Kann nicht Rekursion excatly herauszufinden.

void print_pattern(int spaces, int stars){ 
    static int spaces = 4, stars = 1, number_of_lines = 5; 
    int i, j; 
    for(i = 1; i <= spaces; i++) 
     printf(" ");    //print spaces 
    for(j = 1; j <= stars; j++) 
     printf("*");    //print stars 
    if(number_of_lines > 0){ 
     number_of_lines -= 1; 
     //call recursively if all lines are not printed 
     print_pattern(spaces - 1, stars + 1); 
    } 
} 
+2

aussehen könnte was Sie versucht zu tun haben? – UnholySheep

+1

Denken Sie über das Problem nach, und versuchen Sie, es zu lösen, dann schreiben Sie, wo Sie stecken bleiben !! –

+1

Sie könnten versuchen, eine Funktion zu schreiben, die die Basisbreite in Zeichen und die aktuelle Breite in Zeichen annimmt. Finden Sie heraus, wie Sie die aktuelle Breite in der Basisbreite zentrieren und die Anzahl der Sterne drucken können. Wenn die aktuelle Breite nicht der Basisbreite entspricht, rufen Sie die Funktion rekursiv auf und übergeben Sie die Basisbreite und die aktuelle Breite plus zwei. Habe Spaß. –

Antwort

0

Die rekursive Funktion kann auf folgende Weise geschrieben werden, wie es in dem unten stehenden demonstrativen Programm gezeigt. Sie müssen lediglich einen Dateinamen angeben, die Datei öffnen und den Zeiger auf die Datei in der Funktion übergeben. Im Demonstrationsprogramm wird stdin als Funktionsargument verwendet.

#include <stdio.h> 
#include <stdbool.h> 

void pyramid(FILE *f, unsigned int n) 
{ 
    static int width = 0; 

    if (n) 
    { 
     ++width; 
     pyramid(f, n - 1); 

     for (unsigned int i = 0; i < 2 * n - 1; i++) 
     { 
      fprintf(f, "%*c", i == 0 ? width : 1, '*'); 
     } 

     fputc('\n', f); 

     --width; 
    } 
} 

int main(void) 
{ 
    while (true) 
    { 
     printf("Enter a non-negative number (0 - exit): "); 

     unsigned int n; 

     if (scanf("%u", &n) != 1 || n == 0) break; 

     putchar('\n'); 

     pyramid(stdout, n); 

     putchar('\n'); 
    } 

    return 0; 
} 

Das Programm Ausgabe wie

Enter a non-negative number (0 - exit): 5 

    * 
    *** 
    ***** 
******* 
********* 

Enter a non-negative number (0 - exit): 4 

    * 
    *** 
***** 
******* 

Enter a non-negative number (0 - exit): 3 

    * 
*** 
***** 

Enter a non-negative number (0 - exit): 2 

* 
*** 

Enter a non-negative number (0 - exit): 1 

* 

Enter a non-negative number (0 - exit): 0