Parfois, dans les entretiens, je peux utiliser la récursivité pour résoudre un problème (comme ajouter 1
à un entier de précision infinie), ou lorsque le problème se présente comme approprié pour utiliser la récursivité. Parfois, cela peut simplement être dû à l'utilisation fréquente de la récursivité pour la résolution de problèmes, donc sans trop réfléchir, la récursion est utilisée pour résoudre le problème.
Cependant, quelles sont les considérations avant de pouvoir décider qu'il est approprié d'utiliser la récursivité pour résoudre un problème?
Quelques réflexions que j'ai eues:
Si nous utilisons la récursivité sur des données qui sont divisées par deux à chaque fois, il semble que l'utilisation de la récursion ne pose aucun problème, car toutes les données pouvant tenir dans 16 Go de RAM, ou même un disque dur de 8 To, peuvent être traitées par récursivité à seulement 42 niveaux de profondeur. (donc pas de débordement de pile (je pense que dans certains environnements, la pile peut avoir une profondeur de 4000 niveaux, bien plus que 42, mais en même temps, cela dépend aussi du nombre de variables locales dont vous disposez, car chaque pile d'appels occupe plus de mémoire) s'il existe de nombreuses variables locales, et c'est la taille de la mémoire, et non le niveau, qui détermine le débordement de la pile)).
Si vous calculez les nombres de Fibonacci en utilisant la récursivité pure, vous devez vraiment vous soucier de la complexité temporelle, sauf si vous mettez en cache les résultats intermédiaires.
Et que diriez-vous d'ajouter 1
à un entier de précision infinie? Peut-être que cela peut être discuté, car travaillerez-vous avec des nombres de 3 000 chiffres ou de 4 000 chiffres, si gros que cela peut provoquer un débordement de pile? Je n'y ai pas pensé, mais peut-être que la réponse est non, nous ne devrions pas utiliser la récursivité, mais simplement utiliser une boucle simple, car si dans certaines applications, le nombre doit vraiment être de 4000 chiffres, pour vérifier certains propriétés du nombre, par exemple si le nombre est premier ou non.
La question ultime est: quelles sont les considérations avant de pouvoir décider d'utiliser la récursivité pour résoudre un problème?
1
à un entier de précision infinie? Vous pouvez dire, oui, ils se réduisent à des problèmes plus petits, mais la récursivité pure ne lui convient pas