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.
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.
À 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.
(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