Afin d'estimer la profondeur d'appel maximale qu'une méthode récursive peut atteindre avec une quantité de mémoire donnée, quelle est la formule (approximative) permettant de calculer la mémoire utilisée avant qu'une erreur de débordement de pile soit susceptible de se produire ?
Editar:
Beaucoup ont répondu par "ça dépend", ce qui est raisonnable. Supprimons donc certaines des variables en utilisant un exemple trivial mais concret :
public static int sumOneToN(int n) {
return n < 2 ? 1 : n + sumOneToN(n - 1);
}
Il est facile de montrer que l'exécution de cette opération dans mon IDE Eclipse explose pour n
un peu moins de 1000 (ce qui me paraît étonnamment bas). Cette limite de profondeur d'appel aurait-elle pu être estimée sans l'exécuter ?
Edit : Je ne peux m'empêcher de penser qu'Eclipse a une profondeur d'appel maximale fixe de 1000, car je suis arrivé à 998
mais il y en a un pour la méthode principale et un pour l'appel initial à la méthode, ce qui fait que 1000
en tout. Ce chiffre est trop rond pour être une coïncidence. Je vais poursuivre mes recherches. J'ai juste Dux overhead le paramètre -Xss vm ; c'est la taille maximale de la pile, donc le runner Eclipse doit avoir -Xss1000
placer quelque part