Créer un triangle de stars en utilisant uniquement la récursivité
J'ai besoin d'écrire une méthode qui est appelée comme printTriangle(5);
. Nous avons besoin de créer une méthode itérative et récursive de la méthode (sans itération). La sortie doit ressembler à ceci:
*
**
***
****
*****
Ce code fonctionne avec l'itératif, mais je ne peux pas l'adapter pour être récursive.
public void printTriangle (int count) {
int line = 1;
while(line <= count) {
for(int x = 1; x <= line; x++) {
System.out.print("*");
}
System.out.print("\n");
line++;
}
}
Je note que vous ne pouvez pas utiliser n'importe quelle classe les variables de niveau ou externes méthodes.
- Est-ce un devoir?
- Les espaces ne sont pas valides caractères en Java noms de méthode. Vous devrez l'appeler
like_printTriangle(5)
- Oui, il est. C'est la première fois en 22 chapitres, j'ai eu aucun problème. @mobrule: Ce que cela a à voir avec quoi que ce soit? Une chose que j'ai essayé a été formaté à l'aide de la chaîne, mais il semble que Java ne prend pas en charge personnalisée les caractères de remplissage.
- Pourquoi avez-vous combiner une boucle while et pour la boucle dans la version itérative? Il sera beaucoup plus propre (et peut-être plus facile de convertir à la récursion) avec deux boucles for imbriquées).
- Je pourrais, mais mon professeur dit qu'il veut la clarté sur les performances (je pense qu'il est juste paresseux).
- Voir aussi: stackoverflow.com/questions/2498039/...
Vous devez vous connecter pour publier un commentaire.
Avis dans votre démarche itérative qui vous avez deux compteurs: la première est que ligne vous êtes sur
line
, et la deuxième est ce que la position sur la ligne que vous êtes surx
. Vous pouvez créer une fonction récursive qui prend deux paramètres et les utilise comme imbriquée compteurs,y
etx
. Où vous décrémenter x jusqu'à ce qu'il atteigne 0, décrémenter y et x = y, jusqu'à ce que x et y sont égales à 0.Vous pouvez également remarquer que chaque ligne successive dans le triangle est la ligne précédente, plus une étoile. Si votre récursive de la fonction renvoie une chaîne d'étoiles pour la ligne précédente, la ligne suivante est toujours de cette chaîne, plus une étoile de plus. Ainsi, votre code pourrait être quelque chose comme:
System.out.println(p);
Vous pouvez convertir une boucle récursive de la fonction comme ceci:
Vous devriez être en mesure de faire un similaires de la fonction d'impression des lignes.
printStars
.starCount
etlineCount
– et l'appel lui-même pour la ligne suivante après avoir fini de la ligne courante.Exemple en python (juste pour le plaisir de prototypage, mais j'espère que l'idée passe à travers):
De sortie ressemble à ceci:
Vous pouvez aussi le faire avec un seul (pas très élégant) la récursivité,comme suit:
L'idée est que la méthode params représenter le dessin complet de l'état.
Noter que la taille doit être supérieure à 0.
Vous pouvez le faire comme ceci:
La méthode obtient le nombre d'étoiles comme un paramètre. Appelons n.
Puis c':
appelle récursivement à n-1.
affiche une ligne avec n étoiles.
Assurez-vous de ne rien faire si n == 0.
Je pense que cela devrait fonctionner... non testés sur le dessus de ma tête.
Donc, vous devez créer un petit bloc. Quelles sont les informations qui bloquent besoin? Juste le maximum. Mais la récursivité besoin de savoir ce que la ligne de son sur... vous vous retrouvez avec un constructeur comme:
Maintenant, utilisez-les pour mettre le reste de la récursivité ensemble:
Maintenant, tout ce que vous avez à faire, c'est lancer:
je pense que cela devrait le faire