Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Chapitre no 1 : Récursivité Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés La récursivité est un concept selon lequel dans la définition d’un objet ou la réalisation d’une démarche, il est fait appel à l’objet lui-même ou à la démarche elle-même. Les cas suivants constituent des cas concrets de récursivité : processus dépendant de paramètres et faisant appel à ce même processus sur d’autres paramètres plus simples. Par exemple : suites récurrentes ; Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python La récursivité est un concept selon lequel dans la définition d’un objet ou la réalisation d’une démarche, il est fait appel à l’objet lui-même ou à la démarche elle-même. Les cas suivants constituent des cas concrets de récursivité : processus dépendant de paramètres et faisant appel à ce même processus sur d’autres paramètres plus simples. Par exemple : suites récurrentes ; Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés image contenant en elle-même des images similaires. Voir figures 1a et 1b ; Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python La récursivité est un concept selon lequel dans la définition d’un objet ou la réalisation d’une démarche, il est fait appel à l’objet lui-même ou à la démarche elle-même. Les cas suivants constituent des cas concrets de récursivité : processus dépendant de paramètres et faisant appel à ce même processus sur d’autres paramètres plus simples. Par exemple : suites récurrentes ; Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés image contenant en elle-même des images similaires. Voir figures 1a et 1b ; concept défini en invoquant le même concept ; Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python La récursivité est un concept selon lequel dans la définition d’un objet ou la réalisation d’une démarche, il est fait appel à l’objet lui-même ou à la démarche elle-même. Les cas suivants constituent des cas concrets de récursivité : processus dépendant de paramètres et faisant appel à ce même processus sur d’autres paramètres plus simples. Par exemple : suites récurrentes ; Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés image contenant en elle-même des images similaires. Voir figures 1a et 1b ; concept défini en invoquant le même concept ; algorithme qui s’appelle lui-même. Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python La récursivité est un concept selon lequel dans la définition d’un objet ou la réalisation d’une démarche, il est fait appel à l’objet lui-même ou à la démarche elle-même. Les cas suivants constituent des cas concrets de récursivité : processus dépendant de paramètres et faisant appel à ce même processus sur d’autres paramètres plus simples. Par exemple : suites récurrentes ; Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés image contenant en elle-même des images similaires. Voir figures 1a et 1b ; concept défini en invoquant le même concept ; algorithme qui s’appelle lui-même. Mots-clefs associés : Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python La récursivité est un concept selon lequel dans la définition d’un objet ou la réalisation d’une démarche, il est fait appel à l’objet lui-même ou à la démarche elle-même. Les cas suivants constituent des cas concrets de récursivité : processus dépendant de paramètres et faisant appel à ce même processus sur d’autres paramètres plus simples. Par exemple : suites récurrentes ; Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés image contenant en elle-même des images similaires. Voir figures 1a et 1b ; concept défini en invoquant le même concept ; algorithme qui s’appelle lui-même. Mots-clefs associés : récurrence, autoréférence, mise en abyme. Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés (a) Vache (b) Arbre récursif Figure – Exemples de dessins récursifs Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Définition Définition récursive d’un objet Une définition récursive d’un objet a pour caractéristique d’y voir figurer l’objet lui-même : objet == (une définition qui utilise le mot objet) Chapitre no 1 : Récursivité 1 Fonctions mathématiques définies récursivement 1 Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Multiplication de deux entiers (reformulation). n × a = (n − 1) × a + a Chapitre no 1 : Récursivité 1 Fonctions mathématiques définies récursivement 1 Multiplication de deux entiers (reformulation). n × a = (n − 1) × a + a Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés 2 Puissance d’un nombre décimal au Collège (reformulation). an = an−1 × a Chapitre no 1 : Récursivité 1 Fonctions mathématiques définies récursivement 1 Multiplication de deux entiers (reformulation). n × a = (n − 1) × a + a Introduction Définitions récursives Définition Exemples 2 Algorithme récursif Puissance d’un nombre décimal au Collège (reformulation). an = an−1 × a Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés 3 Factorielle en Terminale (reformulation). n! = (n − 1)! × n Chapitre no 1 : Récursivité 1 Fonctions mathématiques définies récursivement 1 Multiplication de deux entiers (reformulation). n × a = (n − 1) × a + a Introduction Définitions récursives Définition 2 Exemples Algorithme récursif Puissance d’un nombre décimal au Collège (reformulation). an = an−1 × a Définition En Python Exemples 3 Récursivité et pile n! = (n − 1)! × n Choix d’exercices Intérêt Problèmes soulevés Factorielle en Terminale (reformulation). 2 Arbre généalogique : concaténation de l’individu et des arbres généalogiques du père et de la mère Chapitre no 1 : Récursivité 1 Fonctions mathématiques définies récursivement 1 Multiplication de deux entiers (reformulation). n × a = (n − 1) × a + a Introduction Définitions récursives Définition 2 Exemples Algorithme récursif Puissance d’un nombre décimal au Collège (reformulation). an = an−1 × a Définition En Python Exemples 3 Récursivité et pile n! = (n − 1)! × n Choix d’exercices Intérêt Factorielle en Terminale (reformulation). 2 Problèmes soulevés 3 Arbre généalogique : concaténation de l’individu et des arbres généalogiques du père et de la mère Palindrome : palindrome entouré de deux lettres identiques Chapitre no 1 : Récursivité 1 Fonctions mathématiques définies récursivement 1 Multiplication de deux entiers (reformulation). n × a = (n − 1) × a + a Introduction Définitions récursives Définition 2 Exemples Algorithme récursif Puissance d’un nombre décimal au Collège (reformulation). an = an−1 × a Définition En Python Exemples 3 Récursivité et pile n! = (n − 1)! × n Choix d’exercices Intérêt Factorielle en Terminale (reformulation). 2 Problèmes soulevés 3 Arbre généalogique : concaténation de l’individu et des arbres généalogiques du père et de la mère Palindrome : palindrome entouré de deux lettres identiques Question 1 Ces définitions sont-elles pertinentes ? Chapitre no 1 : Récursivité Introduction Algorithme récursif Définition Définitions récursives Un algorithme récursif se caractérise par : Définition Exemples 1 une base de récursivité correspondant à un ou plusieurs cas particuliers à partir desquels la chaîne de récurrence (on dira plutôt d’induction) s’enclenche 2 le traitement des autres éléments faisant appel à un ou plusieurs appels récursifs Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Chapitre no 1 : Récursivité Introduction Algorithme récursif Définition Définitions récursives Un algorithme récursif se caractérise par : Définition Exemples 1 une base de récursivité correspondant à un ou plusieurs cas particuliers à partir desquels la chaîne de récurrence (on dira plutôt d’induction) s’enclenche 2 le traitement des autres éléments faisant appel à un ou plusieurs appels récursifs Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Le processus est semblable à la récurrence utilisée en mathématiques qui comporte de même : 1 une phase d’ initialisation 2 la propriété dite d’hérédité Chapitre no 1 : Récursivité Fonction récursive en Python Cas particulier où le paramètre est un entier naturel Introduction Définitions récursives Ici le paramètre n prend pour valeur initiale 0 et l’appel récursif porte sur l’argument n − 1 : Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés def maFonction ( n ) : if n == 0 : return le r é sultat pour n = 0 else : return une formule o ù appara î t maFonction (n -1) Chapitre no 1 : Récursivité Fonction récursive en Python Cas particulier où le paramètre est un entier naturel Introduction Définitions récursives Ici le paramètre n prend pour valeur initiale 0 et l’appel récursif porte sur l’argument n − 1 : Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés def maFonction ( n ) : if n == 0 : return le r é sultat pour n = 0 else : return une formule o ù appara î t maFonction (n -1) Ainsi, pour l’exemple de la fonction puissance, on définira : def puissance (a , n ) : if n == 0 : return 1 else : return a * puissance (a ,n -1) Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Fonction récursive en Python Cas plus général Le codage de manière générale d’une fonction récursive s’écrira selon le canevas : def maFonction ( x ) : if x == ( base ) : return ( r é sultat pour maFonction appliqu é e à la base ) else : ... return ( un ou plusieurs appels r é cursifs à maFonction ) Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Fonction récursive en Python Cas plus général Le codage de manière générale d’une fonction récursive s’écrira selon le canevas : def maFonction ( x ) : if x == ( base ) : return ( r é sultat pour maFonction appliqu é e à la base ) else : ... return ( un ou plusieurs appels r é cursifs à maFonction ) Question 2 N’y-a-t-il pas une condition sur les arguments appelés ? Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Fonction récursive en Python Exemple 1 : fonction factorielle def factorielle ( n ) : if n == 0 : return 1 else : return n * fact (n -1) Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Fonction récursive en Python Exemple 2 : Suite de Fibonacci def Fibo ( n ) : if n == 0 or n == 1 : return n else : return Fibo (n -1) + Fibo (n -2) Chapitre no 1 : Récursivité Introduction Définitions récursives Fonction récursive en Python Exemple 3 : palindrome Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés def palindrome ( s ) : if len ( s ) <= 1: return True else : n = len ( s ) return ( s [0] == s [n -1]) and ( palindrome ( s [1: n -1]) ) Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Fonction récursive en Python Exemple 4 : décomposition en facteurs premiers On suppose ici avoir défini préalablement une fonction ppdp qui rend le plus petit diviseur premier de n. en facteurs premiers def decompose ( n ) : if n == 0: # cas d ’ exception return " pas de d é composition en facteurs premiers pour 0 " elif n == 1: # cas de base return [] else : # appel r é cursif p = ppdp ( n ) return [ p ]+ decompose ( n // p ) Chapitre no 1 : Récursivité Exécution d’une fonction récursive Création et exécution d’une pile 1/6 Introduction Définitions récursives Définition Exemples Algorithme récursif Pour comprendre le processus de calcul, reprenons la fonction puissance et voyons ce qui se passe pour le calcul de 52 , lors de l’appel puissance(5,2). On travaille avec une pile. Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Au départ la pile est Vide. Juste après l’appel puissance(5,2), une place est réservée en mémoire à une adresse, notons-la A 2, pour stocker puissance(5,2) : l’état de la pile est donc après une action push Adresse A2 Valeur ? Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Exécution d’une fonction récursive Création et exécution d’une pile 2/6 Dans l’exécution de puissance(5,2), on appelle puissance(5,1) que l’on multiplie par 5 : une place est cette fois réservée en mémoire en haut de pile (nouveau push) à une adresse que nous noterons A 1 pour stocker puissance(5,1) ; et on laisse en attente en A 2 le calcul 5 × Valeur 1 où la Valeur 1 est la valeur « pointée » en adresse 1 ; l’état de la mémoire est à présent : Adresse A1 A2 Valeur ? 5 × Valeur 1 Chapitre no 1 : Récursivité Introduction Définitions récursives Exécution d’une fonction récursive Création et exécution d’une pile 3/6 Définition Exemples Algorithme récursif Définition En Python Dans l’exécution de puissance(5,1) : même démarche qu’à l’étape précédente avec appel à puissance(5,0) et un nouveau push : Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Adresse A0 A1 A2 Valeur ? 5 × Valeur 0 5 × Valeur 1 Chapitre no 1 : Récursivité Introduction Définitions récursives Exécution d’une fonction récursive Création et exécution d’une pile Définition Exemples Algorithme récursif Définition Dans l’exécution de puissance(5,0), on rend directement comme résultat 1 : En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Adresse A0 A1 A2 Valeur 1 5 × Valeur 0 5 × Valeur 1 4/6 Chapitre no 1 : Récursivité Introduction Définitions récursives Exécution d’une fonction récursive Création et exécution d’une pile 5/6 Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Dans la pile ainsi constituée, on a une valeur en haut de pile : ceci a pour effet de supprimer (action pop) la tête de pile et d’envoyer sa valeur comme argument à l’adresse 1 : Adresse A1 A2 Valeur 5 5 × Valeur 1 Chapitre no 1 : Récursivité Introduction Définitions récursives Exécution d’une fonction récursive Création et exécution d’une pile 6/6 Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés puis par le même procédé (nouvelle action pop) Adresse A2 Valeur 25 La pile est de hauteur 1 et contient une valeur, nouvelle action pop qui rend la pile Vide : la valeur finale est renvoyée comme résultat : 25 Chapitre no 1 : Récursivité Introduction Définitions récursives Choix d’exercices Exercice 1 facile Définition Exemples Algorithme récursif Définition En Python Pour la suite (un ) définie par : u0 = 0 et ∀ n ∈ N, un+1 = (n + 1) − un Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés écrire le code Python correspondant puis proposer une conjecture concernant la formule explicite de un . Exercice de maths : la démontrer. Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition Choix d’exercices Exercice 2 chaud Pour la suite (vn ) définie par : v0 = 0 et ∀ n ∈ N, vn+1 = (n + 1) − vvn En Python Exemples Récursivité et pile Choix d’exercices écrire le code Python correspondant. Challenge 1 : trouver la formule explicite. Procéder par extrapolation... Intérêt Problèmes soulevés Challenge 2 : démontrer cette formule. Chapitre no 1 : Récursivité Choix d’exercices Exercice 3 : un petit dernier pour la route... cool Introduction Définitions récursives Définition Exemples Algorithme récursif Définition Jeu de briques : Coder une fonction Python qui rend le nombre de façons d’obtenir une ligne de briques de longueur n en n’utilisant que des briques de longueur 2 ou 3 : En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés In [5]: briques (7) Out [5]: 3 In [6]: briques (8) Out [6]: 4 In [7]: briques (10) Out [7]: 7 Chapitre no 1 : Récursivité Intérêt de la récursivité Un comportement inhumain Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés De nombreux problèmes sont résolus par l’ordinateur en ayant recours à des algorithmes récursifs. Nous aurons l’occasion de revenir sur ce point et d’en voir toute la portée. Citons : la résolution du problème des tours de Hanoï (T.P. no 2) ; l’algorithme hautement efficace de tri par fusion d’une liste (qui sera vu prochainement). Ces deux exemples montreront combien le cerveau humain ne peut (hélas ?) fonctionner comme un ordinateur. La démarche effectuée dans les deux cas ne peut être une démarche « humaine » : c’est bien l’ordinateur qui dans le cas des tours de Hanoï fournit concrètement (pas à pas) la démarche à suivre. Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Problèmes soulevés Terminaison des algorithmes récursifs Exemple 1 Considérons la fonction Python définie par : def u ( n ) : if n == 0 : return 1 else : return n - u ( u (n -1) ) Choix d’exercices Intérêt Problèmes soulevés Question 3 Que va-t-il se passer ? D’où vient exactement le problème ? Chapitre no 1 : Récursivité Problèmes soulevés Terminaison des algorithmes récursifs Exemple 2 Introduction Définitions récursives Définition Considérons l’exemple suivant tiré de la célèbre suite de Syracuse (cf. T.P. no 1) : Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés def longueurDuVol ( c ) : assert c >0 , " le param è tre doit ê tre un naturel non nul " if c == 1: return 0 elif c % 2 == 0: return 1+ longueurDuVol ( c // 2) else : return 1+ longueurDuVol (3* c +1) Question 4 Quel problème pose cette fonction ? Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Problèmes soulevés Terminaison des algorithmes récursifs Théorème Les deux exemples précédents nous fournissent une illustration du théorème : Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Théorème Soit une fonction récursive dont le paramètre est un entier naturel. Pour qu’elle termine, il suffit que les appels récursifs portent sur des arguments strictement inférieurs à l’argument initial Chapitre no 1 : Récursivité Introduction Définitions récursives Définition Exemples Algorithme récursif Problèmes soulevés Terminaison des algorithmes récursifs Lorsque la fonction ne porte pas sur un paramètre naturel, il est par analogie suffisant, pour que cette fonction termine, que : 1 l’ensemble des paramètres soit muni d’une relation d’ordre notée 4 qui permet de pouvoir dire qu’un argument est "avant" (4) un autre argument 2 les appels récursifs portent sur des arguments qui sont "avant" (4) l’argument initial. Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés Induction On parle alors d’induction (au lieu de récurrence). Les démonstrations de terminaison se font par "induction", processus similaire à la récurrence forte (cf. ci-dessous). Chapitre no 1 : Récursivité Problèmes soulevés Terminaison Démonstrations Introduction Définitions récursives 1 Définition Exemples Algorithme récursif Définition En Python Exemples Récursivité et pile Choix d’exercices Intérêt Problèmes soulevés 2 Si le paramètre est dans N, la démonstration de terminaison se fait par une récurrence simple, double ou forte selon les cas. On pose : P(n) : " la fonction termine pour la valeur n " Sinon, la démonstration de terminaison se fait par induction. On pose alors : P(x ) : "la fonction termine pour la valeur x " Base : on démontre la propriété P(init) où init est la valeur minimale du paramètre Induction : pour x fixé, on suppose la propriété P(y ) vraie pour tout y ≺ x , et on démontre qu’elle est alors aussi vraie pour x .