0
votes

Fibonacci récursif avec débordement entier

J'ai utilisé la mémoire de mémoisation pour réduire le temps nécessaire pour compléter les fibonacci récursives.

mais problème est que cela provoque un débordement entier afin que les chiffres ne soient pas complétés après 50 nombres.

alors comment puis-je empêcher l'entier Overflow à la fois chez récursif et itératif?

J'ai entendu dire que la surcharge de l'opérateur peut le résoudre ..? mais je n'ai aucune idée de la façon de le faire. xxx

}

Le résultat doit être imprimé Fibonacci avec chaque incrément de n + 10, à la fois récursif et itératif en 30 minutes.


2 commentaires

Le numéro de 200ème fibonacci est 453973694165307953197296969697410619233826, environ 2 ^ 138. Le plus grand nombre que la bibliothèque standard C ++ fournit est un uint64_t ou 2 ^ 64. Si vous souhaitez gérer des nombres plus importants, vous avez besoin d'une bibliothèque de précision arbitraire telle que libgmp.


FYI, étant donné que la seule opération que vous utilisez est une addition, il est très facile d'implémenter des nombres volumineux vous-même (comme vecteur ). Pas besoin de réinventer la roue, mais 1), il peut être une expérience utile; 2) Si c'est une affectation, la mise en œuvre de grands nombres peut en faire partie.


3 Réponses :


1
votes

Le numéro de 200ème fibonacci (et même le 50ème) est plus grand que 2 ^ 32 (la limite int). Je vous suggère d'utiliser non signé long long au lieu de int , ou même créer un gros type entier à l'aide de tableaux, comme ici .


1 commentaires

20ème ou 200ème est une grande différence



1
votes

Avant d'ajouter les deux numéros (dans Itérative X, Y et dans les valeurs de retour de la méthode reconsive) qui doivent être vérifiées, que l'addition peut provoquer un débordement entier ou non. Pour plus d'informations, consultez cette Post < / a>. Cela peut vous aider à comprendre.


0 commentaires

0
votes
#include<boost/multiprecision/cpp_int.hpp>

using namespace boost:: multiprecision;

 // just add these two lines , now you can use big int type of size 2^1024

//Declaration as same as normal int

int1024_t  X=0; // can holds values upto 2^1024

0 commentaires