[ALGO] Récursivité terminale...
nicotendo
Messages postés
194
Date d'inscription
Statut
Membre
Dernière intervention
-
ekra Messages postés 1870 Date d'inscription Statut Membre Dernière intervention -
ekra Messages postés 1870 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Récursivité non terminale
- Toutes les formules mathématiques terminale pdf - Télécharger - Études & Formations
- Récursivité ! ✓ - Forum Programmation
- Dictée terminale - Guide
- Ppcm avec recursivité ✓ - Forum Programmation
- Terminale mac - Guide
1 réponse
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 :
Factorielle terminale
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); }