Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parMaurice Delorme Modifié depuis plus de 8 années
1
Cours de Langage C Récursivité
2
Objectifs de la séance 11 Connaître la récursivité. Mesurer un temps d’exécution. 2
3
Récursivité et récurrence Deux notions très proches : -mathématiques : récurrence -informatique : récursivité Une fonction récursive est une fonction qui s’appelle elle-même. Intérêts : -permet de résoudre des problèmes simplement -la récursivité est utilisée pour les structures de données autoréférencées (listes chaînées …) 3
4
Exemple : la fonction factorielle 4 n! = n x (n-1) x….x 2 x 1 = n x (n-1)! Algorithme de la fonction Fact : Entrée : un entier positif n Sortie : factorielle de n si n = 0 retourner 1=> condition de sortie de la boucle sinon retourner n x Fact(n-1) La condition de sortie de la boucle (où l’on ne fait pas d’appel récursif) est obligatoire pour éviter d’avoir une boucle infinie
5
Exemple : la fonction factorielle 5 int fact(int n) { if (n == 0) return 1; else return n*fact(n-1); }
6
Exemple : la fonction factorielle 6 int fact(int n) { if (n == 0) return 1; else return n*fact(n-1); } Comment se déroule l’exécution de la fonction ? Appel à fact(4). 4*fact(3) = ?. Appel à fact(3).. 3*fact(2) = ?.. Appel à fact(2)... 2*fact(1) = ?... Appel à fact(1).... 1*fact(0) = ?.... Appel à fact(0).... Retour de la valeur 1.... 1*1... Retour de la valeur 1... 2*1.. Retour de la valeur 2.. 3*2. Retour de la valeur 6. 4*6 Retour de la valeur 24
7
Quelques mots sur la librairie time.h clock_t est un type entier permettant de représenter un temps suivant un codage dépendant de l’implémentation (format ld sur vos machines). CLOCKS_PER_SEC est une constante symbolique qui sert à définir l’unité de temps et représente le nombre d’unités contenues dans une seconde. La fonction clock_t clock(void) permet de connaître le nombre de fractions de temps machine écoulées depuis le début du programme. La valeur retournée peut être convertie en secondes en la divisant par CLOCKS_PER_SEC. Elle peut servir à évaluer l'espace de temps entre deux évènements. 7
8
Exemple d’utilisation de fonctions temporelles 8 int main() {clock_t t1, t2; int i; int a = 0; /* Récupération du temps initial en "clock ticks" */ t1 = clock(); /* réalisation du calcul */ for ( i = 0; i < 10000000; i++) a++; /* Récupération du temps final en "clock ticks" */ t2 = clock(); /* Affichage des différents temps */ printf("Nb ticks/seconde = %ld\n", CLOCKS_PER_SEC); printf("Nb ticks depart : %ld\n",t1); printf("Nb ticks final :%ld\n",t2); printf("Temps consomme (en s):%lf \n", (double)(t2-t1)/CLOCKS_PER_SEC); return 0; }
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.