Taille de la pile dans les fonctions récursives

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Taille de la pile dans les fonctions récursives

Messagepar François Bonnot » 11 Juil 2008, 09:47

Bonjour,
La taille de la pile utilisée par R dans les fonctions récursives semble assez petite. Dans l'exemple très simple suivant, la fonction somme() calcule la somme des n premiers entiers:

Code : Tout sélectionner

> somme <- function(n) { if (n>1) n+somme(n-1) else 1 }
> somme(1200)
[1] 720600
> somme(1300)
Error: evaluation nested too deeply: infinite recursion / options(expressions=)?

La fonction provoque une erreur au delà de 1300, ce qui est peu pour de vraies applications. Y a-t-il un moyen d'augmenter la taille de cette pile? Est-elle gérée par R ou par le système?
L'augmentation de la taille de la mémoire avec memory.limit() ne change rien, ce à quoi on pouvait s'attendre car dans l'exemple précédent la quantité de mémoire nécessaire pour empiler est manifestement très petite.

FB

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Messagepar François Bonnot » 11 Juil 2008, 10:02

J'ai trouvé... En fait j'avais la réponse sous les yeux, à la fin du message d'erreur !
> options(expressions=10000)
> somme(1300)
[1] 845650


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité