Posez votre question Signaler

[ALGO] Récursivité terminale...

nicotendo 191Messages postés 14 novembre 2006Date d'inscription 6 novembre 2011Dernière intervention - Dernière réponse le 12 déc. 2007 à 21:16
Bonjour,
Je souhaiterai ce qu'est une fonction récursive non terminale et terminale, et quel est la différence entre ces deux récursivités.
Merci
Lire la suite 

[ALGO] Récursivité terminale »

1 réponses
Réponse
+4
moins plus
Bonjour,

Une fonction récursive terminale n'effectue pas d'autre opération qu'un dépilement après l'apelle récursif ou le test d'arret de la récursivité. Une fonction récursive non terminale fabrique son résultat au dépilement des fonctions.
Lors d'une récursivité terminale, il est inutile de sauver le contexte de la fonction. Si le compilateur peut optimiser, on gagne en espace mémoire et en temps d'execution.

Exemple :
(Language C)

Factorielle non terminale :
int factorielle(int n) {
  if (n <= 1) { return 1; }
  return n * factorielle(n - 1);
}


Factorielle terminale
#define factorielle(n) (factorielle(n , 1))

int factorielle(int n, int resultat) {
  if (n <= 1) { return resultat; }
  return factorielle(n-1, n * resultat);
}
Ajouter un commentaire
Ce document intitulé « [ALGO] Récursivité terminale... » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?