Contenu du cours
Java Étendu
Java Étendu
Récursion
Comment casser facilement votre code ?
Pourquoi cela peut-il casser le code ? Parce que cela peut entraîner une récursion infinie, qui consommera sans fin la mémoire et réduira les performances de l'appareil. Alors pourquoi avons-nous besoin de la récursion ? Dans certains cas, la récursion peut être utile, mais elle doit être utilisée avec précaution. Par exemple, la récursion peut remplacer une boucle while. Regardons un exemple d'utilisation de la récursion pour calculer la somme de tous les nombres jusqu'à un nombre passé en paramètre :
Main
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below System.out.println(calculateSum(5)); } // method to calculate the sum of numbers from 1 to num using recursion static int calculateSum(int num) { // if num is greater than 0, recursively calculate the sum if (num > 0) { num = num + calculateSum(num - 1); } else { return 0; } return num; } }
La méthode calculateSum()
s'appelle elle-même avec des valeurs réduites. Nous avons également un point de sortie de cette récursion lorsque la variable num
devient zéro. Cette méthode calcule la somme de tous les nombres de 1 au paramètre, dans notre cas 5
. Regardons le diagramme de flux qui montre comment la récursion fonctionne en utilisant cette méthode comme exemple :
L'exemple ci-dessus démontre comment la méthode s'appelle elle-même avec des valeurs réduites, et lorsqu'elle atteint zéro, elle remonte en additionnant les valeurs. Nous pouvons également observer comment le corps du bloc if
est exécuté, où nous ajoutons num
au résultat de l'appel de la méthode avec une valeur réduite. Les valeurs intermédiaires après chaque appel de méthode sont indiquées près des flèches.
Pouvons-nous éviter d'utiliser la récursion ?
La récursion peut également être remplacée par une boucle régulière. Regardons un exemple où nous utilisons d'abord une méthode récursive, puis une boucle for
pour effectuer la même opération :
Main
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below int num = 5; // printing the result of the recursive sum calculation System.out.println("Result using recursion: " + calculateSum(num)); int result = 0; // calculating the sum using a for-loop for (int i = 1; i <= num; i++) { result = result + i; } // printing the result of the sum calculation using the for-loop System.out.println("Result using for-loop: " + result); } // method to calculate the sum of numbers from 1 to num using recursion static int calculateSum(int num) { // if num is greater than 0, recursively calculate the sum if (num > 0) { num = num + calculateSum(num - 1); } else { return 0; } return num; } }
Ici, nous pouvons voir comment nous remplaçons notre méthode récursive par une boucle for
régulière, en utilisant la variable i
pour incrémenter notre result
par i
à chaque fois jusqu'à ce qu'il atteigne le nombre spécifié num
, qui est le paramètre de la méthode.
Conclusion
En conclusion, les méthodes récursives peuvent être utiles mais aussi risquées. La récursion peut souvent être remplacée par des boucles, et bien qu'elle puisse simplifier certaines tâches, elle peut également causer des problèmes si elle n'est pas utilisée avec précaution. Si vous choisissez d'utiliser la récursion, même avec de l'expérience, assurez-vous de procéder avec prudence.
1. Qu'est-ce que la récursion en Java ?
2. Lequel est préférable d'utiliser, la récursion ou une boucle régulière ?
Merci pour vos commentaires !