Imprimer les nombres de fibonacci jusqu'tp de 15 000 C#
J'ai vu des questions similaires(mais en C) -- Le calcul des Nombres de Fibonacci de manière Récursive en C au sujet de mon problème.
Je suis un peu coincé sur la façon de garder à l'impression des nombres de fibonacci jusqu'à ce qu'il atteigne environ 40 000 personnes, en C# dans mon application console, Comment puis-je y parvenir?
E. G, je veux que la demande pour ce faire:
0
1
1
2
3
5
8
and so on.
Grâce.
Je déteste dire cela, mais j'ai eu une trouvaille, et résolu!
Voici ce que j'ai fait:
static void Main(string[] args)
{
int num1 = 0;
int num2 = 1;
int sum = 1;
while (num1 <= 15000)
{
sum = num1 + num2;
num1 = num2;
num2 = sum;
Console.WriteLine(num2);
}
Console.ReadLine();
}
- Finalement, vous n'en avaient plus d'espace de pile si vous procédez de cette manière récursive, ce qui va se passer bien avant que se termine jamais.
- Si c'est de manière récursive, vous vous retrouverez avec un débordement de pile, tôt ou tard.
- Qu'avez-vous fait jusqu'à présent? Qu'est-ce spécifiquement êtes-vous à avoir des problèmes avec? Montre-nous ton code. Souvent, les gens veulent que les autres à faire leurs devoirs pour eux si vous avez besoin de nous montrer que vous essayez avant que les gens de l'aide.
- Êtes-vous de demander de l'aide de la conversion de C à C# dans l'exemple ci-dessus?
- Vous avez besoin d'une sorte de sortie de vérifier dans votre récursivité fonction pour vérifier votre 40k condition.
- Vous pouvez déballer tout algorithme récursif dans un processus itératif, à l'aide d'une boucle while et une variable d'état.
- Désolé, j'ai mis à jour avec une référence à ce que j'ai fait jusqu'à présent.
- Je ne suis pas de faire ses devoirs.
- Ce serait bien si C# pourrait faire la queue la récursivité...
- Aucune idée de pourquoi voulez-vous exécuter ce pour toujours. Je ne suis pas C# expert, mais j'ai entendu C# a quelques fonctionnelle de la programmation des fonctions. Peut-être que si vous voulez une suite infinie vous pourriez mettre en œuvre certaines paresseux séquence ou quelque chose?
- L'algorithme récursif de Fibonacci est dans la question. Vous nous demandez de faire votre propre travail pour vous, si ce n'est en effet pas de devoirs, que je trouve difficile à croire.
- Je peux garantir à 100% que ce n'est pas de devoirs. Et je l'ai résolu.
- Ce que vous avez modifié dans n'est pas récursive.
- Certaines versions de la gigue va faire la queue de la récursivité. Cependant, depuis fib se répète deux fois dans un typique récursive mise en œuvre, il n'est pas trivial de le transformer en une queue-forme récursive. Notez aussi que même si vous pourriez transformer en une queue récursive forme, la naïve récursive fib est toujours exponentielle dans le temps. Si vous voulez une solution récursive, préférable d'utiliser un memoizer; mieux encore est d'utiliser une solution itérative ou de calculer les nombres directement en utilisant le nombre d'Or.
- Comme @EricLippert mentiones, utilisez la forme fermée de la solution de stackoverflow.com/a/8334397/8384
- eh bien, qui m'a convaincu.
- stackoverflow.com/a/8333602/901059
Vous devez vous connecter pour publier un commentaire.
Comment parler de quelque chose qui a une boucle? Comme:
Juste pour le fun, j'ai pensé jeter dans une façon amusante de faire cela avec LINQ méthodes d'extension et d'un générateur (suite infinie):
Cela génère une infinie (théoriquement) de la séquence (il finira par déborder si vous le laissez aller au-delà de gamme de type int).
Vous pouvez ensuite appeler:
De cette façon, vous avez votre présentation (la sortie), séparé de la génération des données.
EDIT:
une approche différente à l'aide d'une pile
Fibonacci(n)
a exponentiel de l'exécution dans n. Heureusement, la valeur des nombres de fibonacci aussi croît de façon exponentielle, de sorte que le 40k limite est tout de même atteint rapidement.Vous ne pouvez pas le faire de manière récursive - rappelez-vous que chaque appel de méthode utilise vous de la pile. Google, hein, de débordement de pile 🙂
Vous aurez besoin de trouver une itération de la version de l'algorithme, il est partout sur internet. Et, bien sûr, tout fib chiffres sont assez rapidement en cours d'exécution, il est impossible à la sortie de la vie.
Utiliser le Fermé solution de la forme
On dirait qu'il déborde de long à peu près à la 92e nombre de Fibonacci
C# n'est pas facilement prendre en charge la queue de la récursivité, donc en faisant un simple récursivité algorithme va provoquer un débordement de pile avec d'assez grands nombres. Pour ce problème, il serait plus simple d'utiliser une boucle au lieu de la récursivité. Si vous êtes vraiment coincé sur la récursivité, ici est un blog qui explore à la fois semblant de récursivité et de la conversion de C# généré IL code pour utiliser la queue de la récursivité.
Il y a 2 grosses erreurs dans votre programme: