IV. Définition récursive de fonctions : Définition : Définition : On appelle fonction récursive une fonction qui comporte un appel à elle-même. Plus précisément, une fonction récursive doit respecter trois propriétés : 1. Une fonction récursive contient un cas de base. 2. Une fonction récursive doit modifier son état pour se ramener au cas de base. 3. Une fonction récursive doit s’appeler elle-même. Illustrons avec une définition par récurrence de la puissance entière réel . ( d’un nombre Instrumentons pour voir ce qui se passe : Combien de multiplications est-il nécessaire pour calculer x^3 ? Il faut …… multiplications car : x^3= …………. Pour x^n ? Si n = 0 : aucune car x^0 = 1 et si n > 0 : il faut ….. multiplications. Cela se démontre par récurrence. Ainsi, il faudrait naïvement n – 1 multiplications pour calculer x^n. En fait, c’est l’algorithme d’exponentiation rapide qui est à la base de l’implémentation de l’opérateur puissance en Python, algorithme basé sur la récursivité … On en reparlera en exercice ! Exercice 1 : Ecrire un programme calculant n ! (factorielle de n) pour un entier naturel dans une version itérative, puis récursive. Comparer leurs vitesses d’exécution grâce au module time de Python ! AIDE : n ! = 1 si n= 0 n ! = 1 * 2 * 3 * … * n pour n > 0 Déterminer une définition par récurrence de n ! : ………………………………………………………... Info Python : Si vous testez une fonction récursive avec des paramètres nécessitant un très grand nombre d’appels de la fonction, sachez que par défaut, Python limite en général (voir version) le nombre d’appels à 1000. Si l’on souhaite augmenter la taille limite de la pile d’appels récursifs, il suffit d’utiliser les instructions suivantes : import sys sys.setrecursionlimit(100000) A tester ! Au fait qu’est-ce qu’est qu’une pile ???? A voir !!!! Exercice 2 : Soit a un réel positif et un entier naturel n, vérifier que : { ( ( ) ) Ces formules sont à la base de la méthode dite d’exponentiation rapide. Programmer cette méthode naturellement par une fonction récursive. Exercice 3 : ( 1°) a. Vérifier que pour tout réel ( ( )) b. Comparer le nombre d’opérations nécessaires pour un calcul d’image selon les 2 formes ci-dessus. 2°) Algorithme de Hörner : Soit P(x) un polynôme de degré n. P(x) peut s’écrire sous la forme suivante : P(x) = a0 + a1x + a2 x² + a3 x3 + … + an xn = a0 + x(a1+ a2 x + a3 x2 + … + an xn-1) P(x) = a0 + x(a1+ x(a2 + a3 x + … + an xn-2)) P(x) = a0 + x(a1+ x(a2 + x(a3 + … ))) On peut utiliser cette formule pour calculer l’image d’un réel x0 par P. C’est la méthode de Hörner. a. Quel est l’algorithme de calcul ? b. Pour un polynôme de degré n, le nombre d’opérations avec l’écriture P(x) = a0 + a1x + a2 x² + a3 x3 + … + an xn est de l’ordre de n²/2 plus précisément : n²/2 + 3/2 n. Le nombre d’opérations avec la méthode de Hörner est de l’ordre de 2n. Vérifiez-le !