L'éditeur suivant vous proposera un article basé sur une compréhension détaillée et des exemples pratiques des fonctions récursives JS (recommandé). L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un coup d'œil
La technique de programmation d'un programme s'appelant lui-même s'appelle la récursivité.
Un processus ou une fonction s'appelle directement ou indirectement une méthode dans sa définition ou sa description. Il transforme généralement un problème vaste et complexe en une méthode similaire au problème d'origine pour résoudre un problème plus petit. Pour les problèmes d'échelle, la stratégie récursive peut décrire les multiples calculs répétés requis dans le processus de résolution de problèmes avec seulement un petit nombre de programmes, réduisant ainsi considérablement la quantité de code de programme. Le pouvoir de la récursion réside dans la définition de collections infinies d'objets avec des instructions finies. Les programmes écrits en utilisant la pensée récursive sont souvent très concis et faciles à comprendre.
De manière générale, la récursion nécessite des conditions aux limites, une section avant récursive et une section retour récursive. Lorsque les conditions aux limites ne sont pas remplies, la récursion avance ; lorsque les conditions aux limites sont remplies, la récursion revient.
Remarque :
(1) La récursivité s'appelle dans une procédure ou une fonction
(2) Lors de l'utilisation ; Lors de l'utilisation de la stratégie de récursion incrémentale, il doit y avoir une condition de fin de récursion claire, appelée sortie de récursion, sinon elle continuera indéfiniment (impasse).
Les algorithmes récursifs sont généralement utilisés pour résoudre trois types de problèmes :
(1) La définition des données est définie de manière récursive. (Fonction Fibonacci)
(2) La solution du problème est implémentée selon l'algorithme récursif. (Retour arrière)
(3) La forme structurelle des données est définie de manière récursive. (Parcours d'arbres, recherche de graphes)
Inconvénients de la récursivité :
L'algorithme récursif est moins efficace pour résoudre des problèmes. Lors du processus d'appel récursif, le système ouvre une pile pour stocker les points de retour, les quantités locales, etc. de chaque couche. Trop de récursions peuvent facilement provoquer un débordement de pile, etc.
Exemples intéressants de fonctions récursives :
Problème classique - il y a une paire de lapins, tous les mois à partir du 3ème mois après la naissance. Chaque lapin donnera naissance à un couple de lapins. Une fois que le lapin aura atteint le troisième mois, un autre couple de lapins naîtra chaque mois. Si les lapins ne meurent pas, quel est le nombre total de lapins pour chaque mois de la troisième année. ? (Astuce : Le motif des lapins est la séquence 1,1,2,3,5,8,13,21....)
class Program { static void Main(string[] args) { Program p = new Program(); Console.WriteLine(p.tuzi(7)); } public int tuzi(int n) { if (n == 1 || n == 2) { return 1; } else { return tuzi(n - 1) + tuzi(n - 2); } } }
2. Questions intéressantes : âge. Il y a 5 personnes assises ensemble et qui demandent quel âge a la cinquième personne ? Il a dit qu'il avait 2 ans de plus que la 4ème personne. Quand j'ai demandé à la 4ème personne quel âge il avait, il a répondu qu'il avait 2 ans de plus que la 3ème personne. J'ai demandé à la troisième personne et il m'a répondu qu'il avait deux ans de plus que la deuxième personne. J'ai demandé à la deuxième personne et j'ai dit qu'il avait deux ans de plus que la première personne. Finalement, j'ai demandé à la première personne et il m'a dit qu'il avait 10 ans. Quel âge a la cinquième personne ? Implémenté à l'aide d'un algorithme récursif.
class Program { static void Main(string[] args) { Program p = new Program(); Console.WriteLine( p.age(5)); } /// <summary> /// 递归法求岁数 /// </summary> /// <param name="n">有几个人</param> /// <returns></returns> int age(int n) { int c; if(n==1) return 10; else { c = age(n-1)+2; return c; } }
3. Question intéressante : le singe mange de la pêche. Il y a un tas de pêches sur la plage, et cinq singes viennent les partager. Le premier singe divisait le tas de pêches en cinq parties, s'il y en avait une de plus, le singe jetait l'autre à la mer et en emportait une partie. Le deuxième singe a divisé la pêche restante en cinq parties égales, et il y en a eu une de plus. Il a également jeté la pêche supplémentaire dans la mer et en a pris une. Les troisième, quatrième et cinquième singes ont tous fait de même. Oui, combien de pêches y avait-il. là sur la plage ?
Code :
class Program { static void Main(string[] args) { Program p = new Program(); Console.WriteLine( p.PeachNumber(5)); } /// <summary> /// 递归法求桃子数 /// </summary> /// <param name="n"></param> /// <returns></returns> int PeachNumber(int n) { if (n == 1) { //最后一个是至少是六个 return 6; } else { return (PeachNumber(n - 1) + 1) * 5; } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!