Avatar ·

Comment implémenter la récursion en Java ?

Comment implémenter correctement la récursion en Java ? Problème de StackOverflowError

Bonjour à tous ! J'essaie de comprendre la récursion en Java, mais je tombe constamment sur l'erreur StackOverflowError. Pouvez-vous me dire comment organiser correctement un appel récursif de méthode pour l'éviter ?

J'ai écrit une fonction simple pour calculer la factorielle d'un nombre, mais avec la valeur 10000, le programme plante. Voici mon code :

public class RecursionTest {
    public static int factorial(int n) {
        if (n == 0) {
            return 1;
        }
        return n * factorial(n - 1);
    }

    public static void main(String[] args) {
        System.out.println(factorial(10000)); // StackOverflowError
    }
}

J'ai déjà essayé :

  1. Augmenter la taille de la pile via les paramètres JVM (-Xss2m), mais cela ne fait que repousser le problème, sans le résoudre.
  2. Remplacer int par long et BigInteger — le résultat est le même, l'erreur persiste.