En commençant à apprendre le lisp, je suis tombé sur le terme récursif de queue . Qu'est-ce que cela signifie
La récursion de queue est une stratégie récursive dans laquelle une fonction effectue un certain travail, puis s'appelle elle-même. La «queue» fait référence au fait que la récursivité est à la toute fin de la fonction. De nombreux compilateurs de langage de programmation - en particulier fonctionnels - peuvent transformer ces types d'appels en itération, ce qui signifie que la récursivité de queue dans les langages pris en charge peut être utilisée sans craindre un débordement de pile, quel que soit le nombre d'appels.
En commençant à apprendre le lisp, je suis tombé sur le terme récursif de queue . Qu'est-ce que cela signifie
Très simplement, qu'est-ce que l'optimisation des appels de queue? Plus précisément, quels sont quelques petits extraits de code où il pourrait être appliqué, et où non, avec une explication de
Comment sortir une boucle? var largest=0 for(i<-999 to 1 by -1) { for (j<-i to 1 by -1) { val product=i*j if (largest>product) // I want to break out here else if(product.toString.equals(product.toString.reverse)) largest=largest max product } } Comment transformer des boucles imbriquées...
Dans l'état actuel des choses, cette question ne convient pas à notre format de questions / réponses. Nous nous attendons à ce que les réponses soient étayées par des faits, des références ou une expertise, mais cette question suscitera probablement un débat, des arguments, des sondages ou une...
J'ai le morceau de code suivant qui échoue avec l'erreur suivante: RuntimeError: profondeur de récursivité maximale dépassée J'ai essayé de réécrire ceci pour permettre l'optimisation de la récursivité de queue (TCO). Je pense que ce code aurait dû réussir si un TCO avait eu lieu. def trisum(n,...
Il me semble que cela fonctionnerait parfaitement pour faire une optimisation de la récursivité de queue en C et C ++, mais pendant le débogage, je ne semble jamais voir une pile de cadres indiquant cette optimisation. C'est plutôt bien, car la pile me dit à quel point la récursivité est profonde....
Je comprends presque comment fonctionne la récursivité de queue et la différence entre elle et une récursivité normale. je ne comprends pas pourquoi il n'a pas besoin de pile de se rappeler son adresse de retour. // tail recursion int fac_times (int n, int acc) { if (n == 0) return acc; else return...
J'ai trouvé cette question sur les langues optimisant la récursivité de la queue. Pourquoi C # n'optimise pas la récursivité de queue, chaque fois que possible? Pour un cas concret, pourquoi cette méthode n'est-elle pas optimisée en boucle ( Visual Studio 2008 32 bits, si cela compte)?: private...
J'ai vu cette citation sur la question: Qu'est-ce qu'un bon langage fonctionnel sur lequel construire un service Web? Scala en particulier ne prend pas en charge l'élimination des appels de fin, sauf dans les fonctions auto-récursives, ce qui limite les types de composition que vous pouvez faire...
Les langages fonctionnels conduisent à l'utilisation de la récursivité pour résoudre de nombreux problèmes, et donc beaucoup d'entre eux effectuent une optimisation des appels de queue (TCO). TCO provoque les appels à une fonction à partir d'une autre fonction (ou elle-même, auquel cas cette...
J'ai un algorithme de recherche de chemin récursif de queue que j'ai implémenté en JavaScript et j'aimerais savoir si certains (tous?) Navigateurs pourraient éventuellement obtenir des exceptions de dépassement de pile.
J'ai découvert la commande "time" sous Unix aujourd'hui et j'ai pensé l'utiliser pour vérifier la différence de temps d'exécution entre les fonctions récursives de queue et récursives normales dans Haskell. J'ai écrit les fonctions suivantes: --tail recursive fac :: (Integral a) => a -> a...
Voici un morceau de code de la documentation de fs2 . La fonction goest récursive. La question est de savoir comment savoir si elle est sans danger pour la pile et comment raisonner si une fonction est sans danger pour la pile? import fs2._ // import fs2._ def tk[F[_],O](n: Long): Pipe[F,O,O] = {...