[RUBY] Viser une compréhension de base du flux de traitement récursif

Même si je lis la description du code de la fonction récursive qui "m'appelle", je n'ai pas pu la rattraper, j'ai donc écrit un article sur le thème "visant une compréhension de base du flux de traitement récursif" avec ma propre prudence. J'aimerais essayer. Pensons à la façon dont la fonction est exécutée en utilisant le code simple ci-dessous.

Fonction récursive

1  def recursive(n)
2     p 'a'
3     p n
4     return 1 if n == 0
5     p n
6     n * recursive(n - 1)
7     p 'b'
8     p n
9  end
10 
11  p recursive(5)

Lorsqu'il est exécuté, c'est comme suit. recursive1.png

À première vue, j'étais confus car je ne savais pas pourquoi le nombre était passé de 0. En imaginant qu '«une fonction contient une fonction», je vais essayer de sortir le mécanisme d'une fonction récursive en la mâchant à ma manière comme indiqué ci-dessous.

Écoulement brutal

(1) Exécution de la fonction donnée 5 comme argument → (2) p "a" à p n sur la 5ème ligne sont exécutés (* Bien sûr, le suffixe si l'instruction return n'est pas exécutée) → (3) Sur la 6ème ligne, sa propre fonction récursive (4) est exécutée. → Comme la boucle (4), les (2) à (3) ci-dessus sont exécutés jusqu'à récursif (0). (* À ce stade, "(omis) ..." a ", 1, 1" a été traité. ") → (5) Quand récursif (0) est exécuté, le suffixe if instruction return est exécuté après que p "a" à p n sur la troisième ligne soient exécutés. Avec return, le traitement de la fonction récursive (0) se termine. → (6) Revenir en arrière à partir d'ici? Rétrograde? Cela devient un état comme. La scène d'exécution revient à récursif (1), "b" sur la 7ème ligne et p n (* n vaut 1) sur la 8ème ligne sont exécutés, et récursif (1) se termine. → (7) La scène d'exécution revient au récursif (2), "b" sur la 7ème ligne et p n (* n vaut 2) sur la 8ème ligne sont exécutés, et récursif (2) se termine. → (Omis jusqu'à récursif (4)) → (8) La scène d'exécution revient à récursif (5), "b" sur la 7ème ligne et p n (* n vaut 5) sur la 8ème ligne sont exécutés, récursif (5) se termine et toutes les fonctions sont terminées. → (9) Enfin, p récursif (5) (synonyme de p n) 5 est sorti et le processus se termine. (* Si la méthode p est exclue, les 5 derniers ne seront pas émis.)

... Personnellement, les fonctions récursives sont assez difficiles à comprendre. Je suis un peu inquiet de savoir s'il vaut mieux gérer le nombre de places et s'y habituer. : confus:

Recommended Posts

Viser une compréhension de base du flux de traitement récursif
[Swift, un incontournable pour les débutants! ] Comprenons la mise en œuvre du traitement des communications de l'API Web
Traitement d'image: structure de base de l'image lue par le programme
[Java] Lors de l'écriture du source ... Mémorandum ①
Contrôlez le flux de traitement Spring Batch avec JavaConfig.
Réintroduction à Java for Humanities 0: Comprendre l'acte de programmation
Je veux comprendre le flux des paramètres de demande de traitement Spring
[Illustration] Recherche de la somme des pièces avec une fonction récursive [Ruby]
Comprendre le mécanisme de base de log4j2.xml
Une liste de rawValues pour UITextContentType.
Un mémorandum du problème FizzBuzz
Ordre de traitement dans le programme
Viser un tri radix pratique
Comprendre un peu la formule lambda
[Rails] Articles pour les débutants pour organiser et comprendre le flux de form_with
Consulter les notes de la classe java.util.Scanner
J'ai étudié le traitement interne de Retrofit
[Pour moi-même] Transfert du traitement de classe de servlet
Consultez les notes de la classe java.util.Optional
Mémorandum WebMvcConfigurer de Spring Boot 2.0 (printemps 5)
Une note de révision pour la classe java.util.Objects
J'ai approfondi ma compréhension de la méthode de fusion
Trouvez la différence à partir d'un multiple de 10
Consulter les notes du package java.time.temporal
Résoudre le problème de l'accès aléatoire lent pour linkedList, une classe de type collection
Utilisez-vous l'instruction for après tout? Utilisez-vous l'instruction while? Utilisation correcte des instructions for et while