Pourquoi devriez-vous apprendre la récursion même si vous ne l'utiliserez jamais ? Les solutions récursives vous entraînent à adopter quelques mentalités : 1. Plutôt que d'essayer de générer la solution, vous commencez souvent par "quelle est la structure d'une solution valide" et travaillez à rebours. Pour certains problèmes, travailler à rebours est beaucoup plus facile. 2. Lorsque vous résolvez le problème, il est facile de se laisser distraire par tous les "et si". En résolvant un problème de manière récursive, vous êtes souvent contraint d'"ignorer" 90 % des problèmes et de vous concentrer sur le fait d'obtenir juste une partie correcte. 3. Ce qui serait souvent un cas "particulier" dans une solution impérative est un "cas de base" dans une solution récursive. Penser de manière récursive vous oblige parfois à ne pas ignorer les cas particuliers. De plus, les solutions récursives font largement usage de la correspondance de motifs, vous obligeant à penser à toutes les situations que vous pourriez rencontrer. Voici un très bon exemple : Leetcode 335 Self Crossing (problème difficile). Vous voyagez sur une trajectoire en spirale sur une grille (c'est-à-dire que vous tournez toujours à gauche après avoir parcouru une certaine distance vers le nord, le sud, l'est ou l'ouest). La question est : "étant donné la distance de chaque 'segment' de la spirale dans l'ordre, la spirale s'est-elle croisée ou non ?" Bien que la solution à cela n'ait pas besoin d'être une fonction s'appelant elle-même, la solution "agréable" utilise des propriétés récursives : 1. si nous n'avons pas encore trouvé de croisement, nous pouvons supposer qu'il n'y a pas de croisements ou de spirales invalides dans le passé. Nous remarquons en outre qu'il n'importe peu si nous voyageons à gauche, à droite, en haut ou en bas, car nous ne pouvons tourner qu'à gauche. Tout ce qui nous intéresse, c'est si les segments précédents sont parallèles à notre dernier virage et à quelle distance ils se trouvent. 2. lorsque nous tournons à gauche, il y a un nombre extrêmement limité de "segments" dans la spirale dans lesquels nous pouvons entrer en collision, ce qui est "récursivement" vrai peu importe la taille de la spirale. Il y a beaucoup de données passées sur la spirale que nous pouvons ignorer. 3. Il y a un nombre limité de scénarios dans votre dernier virage qui affectent votre logique : a) avez-vous voyagé assez loin pour ne pas entrer en collision avec quoi que ce soit, b) sinon, avec quoi pourriez-vous potentiellement entrer en collision ? (également limité). Le problème avec les Leetcode difficiles, c'est qu'ils deviennent soudainement faciles si vous trouvez l'idée clé. Mais ces idées clés vous viendront plus naturellement si vous vous êtes entraîné à la programmation récursive. Il ne s'agit pas seulement de concevoir des fonctions qui s'appellent elles-mêmes — il s'agit de vous forcer à décomposer le problème de manière à ce qu'il puisse être résolu avec une fonction s'appelant elle-même. Plus vous pouvez décomposer un problème de différentes manières, plus vous êtes susceptible de trouver une solution "aha". Évidemment, je n'ai pas besoin de faire du leetcode dans ma profession, mais j'ai besoin de trouver des moyens créatifs de décomposer les problèmes afin qu'ils deviennent compréhensibles — et l'entraînement à la récursion m'a définitivement aidé avec cela.
1,65K