Tutoriels Java

Java ACCUEIL Introduction à Java Java Démarrer Syntaxe Java Commentaires Java Variables Java Types de données Java Conversion de type Java Opérateurs Java Chaînes Java Mathématiques Java Booléens Java Java Si... Sinon Commutateur Java Java While Boucle Java pour la boucle Java Pause/Continuer Tableaux Java

Méthodes Java

Méthodes Java Paramètres de méthode Java Surcharge de méthode Java Portée Java Récursivité Java

Cours Java

POO Java Classes/Objets Java Attributs de classe Java Méthodes de classe Java Constructeurs Java Modificateurs Java Encapsulation Java Paquets Java/API Héritage Java Polymorphisme Java Classes internes Java Abstraction Java InterfaceJava Énumérations Java Entrée utilisateur Java Data Java Java ArrayList Liste liée Java Java HashMap Jeu de hachage Java Itérateur Java Classes d'encapsulation Java Exception Java Java RegEx Fils Java Java Lambda

Gestion des fichiers Java

Fichiers Java Java créer/écrire des fichiers Fichiers de lecture Java Java supprimer des fichiers

Comment Java

Additionner deux nombres

Référence Java

Mots clés Java Méthodes de chaîne Java Méthodes mathématiques Java

Exemples Java

Exemples Java Compilateur Java Exercices Java Quizz Java Certificat Java


Récursivité Java


Récursivité Java

La récursivité est la technique permettant à une fonction de s'appeler elle-même. Cette technique permet de décomposer des problèmes compliqués en problèmes simples qui sont plus faciles à résoudre.

La récursivité peut être un peu difficile à comprendre. La meilleure façon de comprendre comment cela fonctionne est de l'expérimenter.


Exemple de récursivité

Additionner deux nombres ensemble est facile à faire, mais ajouter une plage de nombres est plus compliqué. Dans l'exemple suivant, la récursivité est utilisée pour additionner une plage de nombres en la décomposant en la simple tâche d'additionner deux nombres :

Exemple

Utilisez la récursivité pour additionner tous les nombres jusqu'à 10.

public class Main {
  public static void main(String[] args) {
    int result = sum(10);
    System.out.println(result);
  }
  public static int sum(int k) {
    if (k > 0) {
      return k + sum(k - 1);
    } else {
      return 0;
    }
  }
}

Exemple expliqué

Lorsque la sum()fonction est appelée, elle ajoute un paramètre kà la somme de tous les nombres inférieurs à ket renvoie le résultat. Lorsque k devient 0, la fonction renvoie simplement 0. Lors de l'exécution, le programme suit ces étapes :

10 + somme(9)
10 + ( 9 + somme(8) )
10 + ( 9 + ( 8 + somme(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + somme(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0

Comme la fonction ne s'appelle pas quand kvaut 0, le programme s'arrête là et renvoie le résultat.


État d'arrêt

Tout comme les boucles peuvent se heurter au problème de la boucle infinie, les fonctions récursives peuvent se heurter au problème de la récursivité infinie. La récursivité infinie est lorsque la fonction ne cesse de s'appeler. Chaque fonction récursive doit avoir une condition d'arrêt, qui est la condition dans laquelle la fonction cesse de s'appeler. Dans l'exemple précédent, la condition d'arrêt est lorsque le paramètre kdevient 0.

Il est utile de voir une variété d'exemples différents pour mieux comprendre le concept. Dans cet exemple, la fonction ajoute une plage de nombres entre un début et une fin. La condition d'arrêt de cette fonction récursive est lorsque end n'est pas supérieur à start :

Exemple

Utilisez la récursivité pour additionner tous les nombres entre 5 et 10.

public class Main {
  public static void main(String[] args) {
    int result = sum(5, 10);
    System.out.println(result);
  }
  public static int sum(int start, int end) {
    if (end > start) {
      return end + sum(start, end - 1);
    } else {
      return end;
    }
  }
}