Mémoire virtuelle et fonction récursive
Fermé
boumbo
-
10 févr. 2010 à 23:07
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 - 11 févr. 2010 à 08:29
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 - 11 févr. 2010 à 08:29
A voir également:
- Mémoire virtuelle et fonction récursive
- Fonction si et - Guide
- Machine virtuelle windows - Guide
- Carte de voeux virtuelle animée et musicale gratuite - Guide
- Mémoire virtuelle - Guide
- Regle virtuelle - Guide
1 réponse
scriptiz
Messages postés
1424
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 septembre 2023
425
11 févr. 2010 à 08:29
11 févr. 2010 à 08:29
Compte plutôt le nombre de champs en mémoire.
Exemple pour cette méthode :
Si je lui demande la factorielle de 100, il passera 100 fois en mémoire, et donc chaque appel aura son propre entier à retenir : int n.
Ici mon entier est codé sur 32 bits, soit 4 bytes (et on s'en fou qu'il soit signé ^^).
Donc 100 * 4 bytes = 400 bytes.
Soit pour 100 appels (comme tu dis), il m'aura fallu 400 bytes, hors toi avec ton giga de RAM tu possède en réalité environ 1.073.741.824 bytes.
Ce qui fait qu'en théorie tu pourrais faire jusqu'à 268.435.456 appels de ta méthode pour autant que tu travaille avec un entier.
Attention toutefois au récursivités terminales, ici ce n'est pas le cas, mais dans bien des cas une méthode récursive peut être terminale, et pour autant que le langage supporte la récursivité terminale (ce qui n'est par exemple pas le cas du Java), tu y gagnes en mémoire car il ne garde pas le résultat de chaque appel.
Renseigne toi sur les récursivité terminales et quels langages les supportes sur Google ;)
Voilà en espérant avoir été le plus clair possible.
Exemple pour cette méthode :
public static int factorielle(int n) { return ((n==0)? 1 : n*factorielle(n-1)); }
Si je lui demande la factorielle de 100, il passera 100 fois en mémoire, et donc chaque appel aura son propre entier à retenir : int n.
Ici mon entier est codé sur 32 bits, soit 4 bytes (et on s'en fou qu'il soit signé ^^).
Donc 100 * 4 bytes = 400 bytes.
Soit pour 100 appels (comme tu dis), il m'aura fallu 400 bytes, hors toi avec ton giga de RAM tu possède en réalité environ 1.073.741.824 bytes.
Ce qui fait qu'en théorie tu pourrais faire jusqu'à 268.435.456 appels de ta méthode pour autant que tu travaille avec un entier.
Attention toutefois au récursivités terminales, ici ce n'est pas le cas, mais dans bien des cas une méthode récursive peut être terminale, et pour autant que le langage supporte la récursivité terminale (ce qui n'est par exemple pas le cas du Java), tu y gagnes en mémoire car il ne garde pas le résultat de chaque appel.
Renseigne toi sur les récursivité terminales et quels langages les supportes sur Google ;)
Voilà en espérant avoir été le plus clair possible.