[ALGO] Récursivité terminale...

Fermé
nicotendo Messages postés 195 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 31 juillet 2012 - 12 déc. 2007 à 19:21
ekra Messages postés 1870 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 24 juillet 2014 - 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

1 réponse

ekra Messages postés 1870 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 24 juillet 2014 342
12 déc. 2007 à 21:16
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);
}
6