Comment imprimer de 1 à 100, sans aucune boucle à l'aide de C#
Je suis en train d'écrire les nombres de 1 à 100, sans l'aide de boucles, à l'aide de C#. Toute indices?
- Quelle en est la raison?
- Si c'est pour une mission, ce que les constructions avez-vous appris jusqu'à présent? Cela aidera à formuler des réponses.
- Avez-vous obtenu de la récursivité encore dans la classe ou est-ce le premier devoir à la maison?
- Ouf. Cette question a été consulté 99 fois quand je l'ai trouvé. Heureux que j'ai raté le cas de coin.
- une vraie question électeurs: C'est une vraie question. Dans le cas où il n'est pas clair, repharsed légèrement: "Comment puis-je imprimer les entiers de 1 à 100, sans l'aide d'une boucle? TIA."
- Utiliser goto à la place.
- Pourquoi est-ce fermé? C'est un total valide & vraie question.
- Ils ne l'aiment pas ces questions simples, je pense. 😉
- Pas même à distance pertinentes.
- C'est une question de programmation toutefois. Je pense qu'il devrait y avoir une définition de ce qui n'est pas une vraie question. Nous avons tous commencé quelque part en souvenir. Il pense que cette communauté doit être en mesure de transporter les programmeurs de différents niveaux d'expérience
- Mélange: d'Accord, aussi longtemps que la personne qui pose la question montre qu'ils ont au moins fait un effort pour résoudre le problème en premier lieu. Sinon, ils apprennent rien, mais passera leurs classes; alors vous et je maintenir les programmes qu'ils ont "écrit". Ce n'est pas quelque chose que je veux faire - vous faire?
- Cette question n'est pas la même que la juste question de débutant telles que "Comment puis-je 'dérouler' une boucle?" C'est évidemment une question de puzzle. C'est pourquoi il y a débat sur si elle doit être fermée.
- Voir La Récursivité .
- stackoverflow.com/questions/2044033/... vous Êtes deux dans la même classe? Si oui, pourquoi ne l'on veut en C#, tandis que l'autre en Java
- (ce serait mieux sur le code de golf)
- Console.Write("001,010,011,100");
Vous devez vous connecter pour publier un commentaire.
La récursivité peut-être?
Pas de boucles, pas de conditions, et pas codé en dur littérale de sortie, aka "diviser et conquérir FTW" solution:
Approche Alternative:
WriteLine
déclarations 🙂Un de plus:
String.Join
est une solution sympa, en effet! Comment n'avait-il pas venu immédiatement à l'esprit?String.Join
.Hé, pourquoi pas?
Range#each
. Il est parfaitement possible de mettre en œuvre avec la récursivité, par exemple. En outre, si vous vraiment vous voulez creuser dans la mise en œuvre, puis même à l'aide d'unfor
boucle est considéré comme "sans boucle", car il finira par être compilé dansGOTO
s de toute façon.GOTO
pour résoudre cette mission, mais sont tous les deux des isomorphe à boucles, donc, en disant: vous ne pouvez pas utiliser quelque chose qui sent comme une boucle genre de défaites le but de cet exercice....Ou serait vous avez accepté une solution récursive?
EDIT: ou vous pouvez le faire et utiliser une variable:
Ne sais pas si cela compte comme la boucle est une sorte de caché, mais si c'est legit, c'est un idiomatiques solution au problème. Sinon, vous pouvez le faire.
Bien sûr, c'est effectivement ce qu'est une boucle sera traduit en tout cas, mais il est certainement mal vu de nos jours pour écrire du code comme ceci.
Voici une ventilation de ce qui se passe dans le code ci-dessus:
Facteur De Performance
La ToList appel va causer de mémoire à allouer pour tous les articles (dans l'exemple ci-dessus de 100 ints). Cela signifie que O(N) l'espace de la complexité. Si c'est un souci dans votre application, c'est à dire si la plage des entiers peuvent être très élevés, alors vous devriez éviter ToList et énumérer les éléments directement.
Malheureusement ForEach ne fait pas partie de l'interface IEnumerable extensions fournis à l'extérieur de la boîte (d'où le besoin de les convertir à la Liste dans l'exemple ci-dessus). Heureusement, il est assez facile de créer:
Ci-dessus IEnumerable extension en place, maintenant dans tous les endroits où vous avez besoin d'appliquer une action à un IEnumerable, vous pouvez simplement appeler ForEach avec un lambda. Alors maintenant l'exemple d'origine ressemble à ceci:
La seule différence est que nous n'avons plus appel ToList, ce qui est constant (O(1)) l'utilisation de l'espace... ce qui serait tout à fait perceptible gain si vous étiez le traitement d'un très grand nombre d'éléments.
Enumerable.Range(1, 100).ForEach(Console.WriteLine);
Pas de boucles, pas de récursivité, juste une table de hachage comme panoplie de fonctionnalités pour choisir le mode de direction:
Juste pour le laid interprétation littérale:
(vous pouvez rire maintenant ou plus tard, ou pas)
Par le temps-je répondre à cela, quelqu'un a déjà, donc, ici, il est de toute façon, avec un crédit à Caleb:
Je pense, de deux façons. L'un d'eux consiste à environ 100 lignes de code!
Il y a une autre façon de réutiliser un peu de code plusieurs fois sans l'aide d'un certain temps/pour la boucle...
Astuce: Faire une fonction qui affiche les nombres de 1 à N. Il devrait être facile de le faire fonctionner pour N = 1. Alors pensez à la façon de le faire travailler pour N = 2.
Avec expressions régulières
La sortie:
Méthode A:
Méthode B:
Juste LINQ il...
Je pense, de deux façons:
Console.WriteLine
goto
dans unswitch
déclarationComplètement inutile méthode:
À la cool et drôle de façon:
C'est plus ou moins pseudo-code que je n'ai pas fait de c# depuis des années, PS en cours d'exécution sur 1 heure de sommeil donc j'ai peut-être tort.
return;
au lieu debreak;
dans votre cas limite. Etprint()
n'est pas la bonne fonction -- je présume que vous voulezConsole.WriteLine()
.Vous devez remarquer que je suis PAS en utilisant la récursivité.
Sentiment un peu méchant ce détachement: