Qu'est-ce que la récursivité et comment ça fonctionne?
Quelqu'un pourrait-il expliquer ce qu'est exactement la récursivité est (et comment il fonctionne dans Ruby, si ce n'est pas trop demander). Je suis tombé sur un long extrait de code en s'appuyant sur la récursivité et il me troublait (je l'ai perdu maintenant, et ce n'est pas tout à fait pertinente).
- comment est-il pas pertinent si c'est ce que vous avais confondu? Et la récursivité est un principe général dans le calcul qui peuvent être effectuées dans la plupart des langues, il n'est pas un concept spécifique à Ruby
Vous devez vous connecter pour publier un commentaire.
Une fonction récursive/appels à la méthode elle-même. Pour un algorithme récursif de résilier vous avez besoin d'une base de cas (par exemple, une condition où la fonction ne pas appeler récursivement) et vous devez également vous assurer que vous obtenez le plus proche de celui de la base de cas dans chaque appel récursif. Regardons un exemple très simple:
Certains problèmes peuvent être très élégamment exprimé avec la récursivité, e.g beaucoup de fonctions mathématiques sont décrits de manière récursive.
Pour comprendre la récursivité, vous devez d'abord comprendre la récursivité.
Maintenant, sur une note plus sérieuse, une fonction récursive est une fonction qui s'appelle elle-même. Un exemple classique de cette construction est la suite de fibonacci:
À l'aide de fonctions récursives vous donne un grand pouvoir, mais est également livré avec un lot de responsability (pun intended) et il présente un certain risque. Par exemple, vous pourriez vous retrouver avec des débordements de pile (je suis sur un rouleau) si votre ressemble est trop grand 🙂
Ruby on Rails exemple:
Récurrence générer tableau de parents de parents
a/m/document.rb
console:
https://gist.github.com/equivalent/5063770
Généralement la récursivité est sur la méthode appelant eux-mêmes, mais peut-être que vous avez rencontrées étaient structures récursives, c'est à dire les objets se référant à eux-mêmes. Ruby 1.9 gère ces vraiment bien:
Je trouve que la dernière ligne est tout à fait méchants; je blogué à propos de ce genre de problèmes avec une comparaison de structures récursives il y a quelques années.