De manière récursive l'impression d'un motif en étoile

Pour mon c++ structures de données de la classe notre mission consiste à imprimer un motif d'étoiles comme ceci

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

avec le nombre de lignes dans le modèle déterminé par la saisie de l'utilisateur. De sorte que le motif ci-dessus affiche si l'utilisateur entre dans une 4.

Nous avons eu une précédente affectation, où nous avons eu pour imprimer le schéma inverse, l'un comme ce

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

et au-dessus de la tendance de l'impression si l'utilisateur entre un 5. Ce motif, l'un au-dessus, je n'ai eu aucun problème avec. J'ai utilisé une boucle for pour imprimer le haut de la moitié, alors appelée récursivement la fonction de nouveau, et puis même pour la boucle d'imprimer le fond de la moitié dans la direction opposée. Pour référence, voici le code que j'ai utilisé pour le dessus motif:

int main()
{
    int number;                                             
    cout << "Enter the number of lines in the grid: ";      

    cin >> number;                                          
    printStars(number);                                     
    cout << endl << "Grid Pattern Complete - End of Program.";
    return 0;
} //end of main 

void printStars(int num)                        
{
    if (num < 0) cout << endl << "Please enter a non negative number." << endl;

        else{

            if (num == 0) return;               

            else{
            for (int q = 1; q <= num; q++)      
            {cout << "*";}
            cout << endl;

            printStars(num - 1);        

            for (int q = 1; q <= num; q++)      
            {cout << "*";} 

            cout << endl;
        } 
    } 
} //end printStars

Cette fonction fonctionne comme la façon dont je le veux, alors j'ai pensé que je pourrais l'utiliser comme une référence pour terminer la deuxième tâche. Le problème, je vais avoir, c'est que, s'il est assez facile à terminer à la première affectation (impression d'une ligne de 4 étoiles, puis une ligne de 3, puis une ligne de 2 , puis une ligne de 1, alors tout ce qui est nouveau dans l'ordre inverse), je n'arrive pas à comprendre comment format la pour les boucles d'imprimer le motif de départ avec une ligne de 1 étoile, puis une ligne de 2, puis une ligne de 3, et ainsi de suite, jusqu'à ce qu'elle est appelée récursivement et imprimé à nouveau dans l'ordre inverse.

Pour la référence, c'est le code que j'ai (pour l'instant) pour la deuxième affectation:

int main()
{
    int number;                                             
    cout << "Enter the number of lines in the grid: ";      
    cin >> number;
    printStars(number, 0);                                 

    cout << endl << "Grid Pattern Complete - End of Program.";

    return 0;
}

void printStars(int num, int num2)
{
  if (num2 <= num)
  {

      for (int e = num; e > num2; e--)
      {
          cout << "*";
      }

      cout << endl;

      printStars(num - 1, num2);

  }
}

La seule chose que cette affiche est la deuxième moitié de la figure;

(Si l'utilisateur entre un 5)

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

Et même de faire ce travail, j'ai récursive de la fonction à la fin, ce qui est hors de l'ordre.

Je suppose que je suis juste confus sur la façon dont cette récursivité est supposé fonctionner, mais j'ai joué avec pendant des heures et je n'arrive pas à le reformater ou de la modifier ou de le restructurer pour qu'elle s'imprime comme j'en ai besoin. Quelqu'un peut-il me donner quelques conseils? Juste peut-être écrire un peu de code de pseudo pour m'aider. C'est pour l'école, donc j'ai besoin d'être en mesure de le comprendre, mais je suis vraiment perdu maintenant.

est-ce le cadre de la cession d'utiliser la récursivité? il semble assez facile de faire cela sans récursivité
oui la cession des appels pour la récursivité. C'est le seul moyen de tourner correctement
Il suffit de pointer qu'une fonction pour imprimer un motif ne doit pas supposer quoi que ce soit sur l'endroit où la valeur du paramètre est venu. Vous devriez être en mesure d'utiliser cette fonction de manière transparente avec le paramètre à venir à partir d'un fichier, codée en dur, etc. Validation de la saisie appartient à l'entrée.
J'ai inclus une réponse avec une légère modification à votre code. Il fonctionne comme prévu. Il utilise la récursivité avec un argument supplémentaire juste comme vous l'avez fait. Je l'ai testé sur ideone.com et inclus le lien et le résultat dans ma réponse.

OriginalL'auteur Dariani Disani | 2015-04-09