Itération vs Récursivité

publicité
Préliminaires
Itération
Récursivité
Itération
vs
Récursivité
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Plan
Préliminaires
Bon ordre sur un type ou un ensemble
Tests conditionnels
Itération
Boucles inconditionnelles
Boucles conditionnelles
Récursivité
Récursivité enveloppée
Récursivité terminale
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Plan
Préliminaires
Bon ordre sur un type ou un ensemble
Tests conditionnels
Itération
Boucles inconditionnelles
Boucles conditionnelles
Récursivité
Récursivité enveloppée
Récursivité terminale
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Rappel
Propriété fondamentale de N : Toute partie non vide de N a un
plus petit élément pour ≤.
On va dire que N est bien ordonné.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Définition
On dit que (E , ≤E ) est bien ordonné, ou que ≤E est un bon
ordre sur E lorsque toute partie non vide de E a un plus petit
élément.
Préliminaires
Itération
Récursivité
Exemples/Contre-exemple
Un exemple trivial d’ensemble bien ordonné :
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Exemples/Contre-exemple
Un exemple trivial d’ensemble bien ordonné : (N, ≤)
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Exemples/Contre-exemple
Un exemple trivial d’ensemble bien ordonné : (N, ≤)
Un exemple d’ensemble mal ordonné :
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Exemples/Contre-exemple
Un exemple trivial d’ensemble bien ordonné : (N, ≤)
Un exemple d’ensemble mal ordonné : (R, ≤)
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Exemples/Contre-exemple
Un exemple trivial d’ensemble bien ordonné : (N, ≤)
Un exemple d’ensemble mal ordonné : (R, ≤)
Un autre exemple d’ensemble bien ordonné :
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Exemples/Contre-exemple
Un exemple trivial d’ensemble bien ordonné : (N, ≤)
Un exemple d’ensemble mal ordonné : (R, ≤)
Un autre exemple d’ensemble bien ordonné : (N2 , ≤lex )
où ≤lex est
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Exemples/Contre-exemple
Un exemple trivial d’ensemble bien ordonné : (N, ≤)
Un exemple d’ensemble mal ordonné : (R, ≤)
Un autre exemple d’ensemble bien ordonné : (N2 , ≤lex )
où ≤lex est l’ordre lexicographique :
(a, b) ≤lex (c, d) ⇔ a < c ou (a = c et b ≤ d).
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Intérêt
Théorème : Dans un ensemble bien ordonné, toute ”suite”
strictement décroissante d’éléments est finie.
Préliminaires
Itération
Récursivité
Plan
Préliminaires
Bon ordre sur un type ou un ensemble
Tests conditionnels
Itération
Boucles inconditionnelles
Boucles conditionnelles
Récursivité
Récursivité enveloppée
Récursivité terminale
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Test conditionnel
C’est le ”si... alors... sinon...”
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Comptons les racines réelles de aX 2 + bX + c.
En langue naturelle :
Si b*b-4*a*c<0 alors
retourner("pas de racines")
si par contre b*b-4*a*c=0 alors
retourner("une unique racine")
sinon
retourner("deux racines")
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Comptons les racines réelles de aX 2 + bX + c.
En Python :
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Comptons les racines réelles de aX 2 + bX + c.
En Python :
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Comptons les racines réelles de aX 2 + bX + c.
En Caml :
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Comptons les racines réelles de aX 2 + bX + c.
En Caml :
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Comptons les racines réelles de aX 2 + bX + c.
Caml permet un truc très cool : le filtrage (pattern-matching)
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Comptons les racines réelles de aX 2 + bX + c.
Caml permet un truc très cool : le filtrage (pattern-matching)
Préliminaires
Itération
Récursivité
Plan
Préliminaires
Bon ordre sur un type ou un ensemble
Tests conditionnels
Itération
Boucles inconditionnelles
Boucles conditionnelles
Récursivité
Récursivité enveloppée
Récursivité terminale
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Boucle inconditionnelle
C’est la boucle ”for”.
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Calculons n!.
En langue naturelle :
Poser resultat=1
Pour i allant de 1 a n faire
resultat = resultat*i
Retourner(resultat)
C’est la boucle inconditionnelle ascendante.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Calculons n!.
En langue naturelle, on peut aussi écrire :
Poser resultat=1
Pour i allant de n a 1 (en descendant) faire
resultat = resultat*i
Retourner(resultat)
C’est la boucle inconditionnelle descendante.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Calculons n!.
En Python :
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Calculons n!.
En Python :
Boucle inconditionnelle ascendante.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Calculons n!.
En Python toujours :
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Calculons n!.
En Python toujours :
Boucle inconditionnelle descendante.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Calculons n!.
En Caml :
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Calculons n!.
En Caml :
Boucle inconditionnelle ascendante.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Calculons n!.
En Caml toujours :
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Calculons n!.
En Caml toujours :
Boucle inconditionnelle descendante.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : variant de boucle
Définition : on appelle variant de boucle un entier qui décroı̂t
strictement à chaque tour de boucle
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : variant de boucle
Définition : on appelle variant de boucle un entier qui décroı̂t
strictement à chaque tour de boucle ou, plus généralement, un
élément d’un ensemble bien ordonné qui décroı̂t strictement à
chaque tour de boucle.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : variant de boucle
Définition : on appelle variant de boucle un entier qui décroı̂t
strictement à chaque tour de boucle ou, plus généralement, un
élément d’un ensemble bien ordonné qui décroı̂t strictement à
chaque tour de boucle.
Pour une boucle for ascendante, on a un variant de boucle gratuit :
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : variant de boucle
Définition : on appelle variant de boucle un entier qui décroı̂t
strictement à chaque tour de boucle ou, plus généralement, un
élément d’un ensemble bien ordonné qui décroı̂t strictement à
chaque tour de boucle.
Pour une boucle for ascendante, on a un variant de boucle gratuit :
n − i.
Pour une boucle for descendante, on a un variant de boucle
gratuit :
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : variant de boucle
Définition : on appelle variant de boucle un entier qui décroı̂t
strictement à chaque tour de boucle ou, plus généralement, un
élément d’un ensemble bien ordonné qui décroı̂t strictement à
chaque tour de boucle.
Pour une boucle for ascendante, on a un variant de boucle gratuit :
n − i.
Pour une boucle for descendante, on a un variant de boucle
gratuit : i.
Intérêt (futur !) : montrer la terminaison d’un algorithme
(prochain cours).
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : invariant de boucle
Définition : on appelle invariant de boucle une quantité qui reste
inchangée après chaque tour de boucle.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : invariant de boucle
Définition : on appelle invariant de boucle une quantité qui reste
inchangée après chaque tour de boucle.
Pour l’exemple de la factorielle calculée avec une boucle for
ascendante :
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : invariant de boucle
Définition : on appelle invariant de boucle une quantité qui reste
inchangée après chaque tour de boucle.
Pour l’exemple de la factorielle calculée avec une boucle for
ascendante : resultat ∗ i! est un invariant de boucle.
Intérêt (futur !) : montrer la correction d’un algorithme (prochain
cours).
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : sortie de boucle anticipée
Il est possible de sortir d’une boucle inconditionnelle de façon
prématurée, comme sur l’exemple ci-dessous : on parle alors de
sortie de boucle anticipée.
Ici c’est même une sortie anticipée de tout le programme.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : sortie de boucle anticipée
Pour sortir uniquement de la boucle et pas de toute la fonction on
utilise ”break” en Python.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : sortie de boucle anticipée
Les sorties de boucle anticipées sont possibles en Caml mais plus
difficiles à Coder :
Pourquoi tant de haine ?
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : sortie de boucle anticipée
Les sorties de boucle anticipées sont possibles en Caml mais plus
difficiles à Coder :
Pourquoi tant de haine ? C’est fait exprès.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : sortie de boucle anticipée
Les sorties de boucle anticipées sont possibles en Caml mais plus
difficiles à Coder :
Pourquoi tant de haine ? C’est fait exprès. Les sorties de boucles
anticipées compliquent les preuves de terminaison et de correction
des algorithmes. Dans l’esprit de l’option, mieux vaut les éviter, si
possible.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple où la boucle ”for” montre ses limites.
Essayons de coder le calcul du pgcd avec une boucle for en Python.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple où la boucle ”for” montre ses limites.
Essayons de coder le calcul du pgcd avec une boucle for en Python.
Une sortie de boucle anticipée est nécessaire. Le code n’est pas
très agréable.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple où la boucle ”for” montre ses limites.
En Caml c’est pire (juste pour le plaisir).
Préliminaires
Itération
Récursivité
Plan
Préliminaires
Bon ordre sur un type ou un ensemble
Tests conditionnels
Itération
Boucles inconditionnelles
Boucles conditionnelles
Récursivité
Récursivité enveloppée
Récursivité terminale
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Boucle conditionnelle
C’est la boucle ”while”.
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Le calcul du pgcd est plus adapté à une boucle conditionnelle.
Calculons a ∧ b.
En langue naturelle :
Tant que b est non nul faire
(a,b)=(b,a mod b)
Retourner(a)
(Tant que condition faire...)
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Calculons a ∧ b.
En Python :
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un exemple vaut mieux qu’un long discours
Calculons a ∧ b.
En Caml :
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : variant et invariant de boucle
On peut définir les variants de boucle et les invariants de boucle
pour une boucle while comme pour une boucle for.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : variant et invariant de boucle
On peut définir les variants de boucle et les invariants de boucle
pour une boucle while comme pour une boucle for.
Définition : on appelle variant de boucle
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : variant et invariant de boucle
On peut définir les variants de boucle et les invariants de boucle
pour une boucle while comme pour une boucle for.
Définition : on appelle variant de boucle un entier qui décroı̂t
strictement à chaque tour de boucle ou, plus généralement, un
élément d’un ensemble bien ordonné qui décroı̂t strictement à
chaque tour de boucle.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : variant et invariant de boucle
On peut définir les variants de boucle et les invariants de boucle
pour une boucle while comme pour une boucle for.
Définition : on appelle variant de boucle un entier qui décroı̂t
strictement à chaque tour de boucle ou, plus généralement, un
élément d’un ensemble bien ordonné qui décroı̂t strictement à
chaque tour de boucle.
Définition : on appelle invariant de boucle
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : variant et invariant de boucle
On peut définir les variants de boucle et les invariants de boucle
pour une boucle while comme pour une boucle for.
Définition : on appelle variant de boucle un entier qui décroı̂t
strictement à chaque tour de boucle ou, plus généralement, un
élément d’un ensemble bien ordonné qui décroı̂t strictement à
chaque tour de boucle.
Définition : on appelle invariant de boucle une quantité qui reste
inchangée après chaque tour de boucle.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : variant et invariant de boucle
Exemple du calcul de a ∧ b par une boucle conditionnelle.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : variant et invariant de boucle
Exemple du calcul de a ∧ b par une boucle conditionnelle.
Variant de boucle :
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : variant et invariant de boucle
Exemple du calcul de a ∧ b par une boucle conditionnelle.
Variant de boucle : b
Invariant de boucle :
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Un peu de théorie : variant et invariant de boucle
Exemple du calcul de a ∧ b par une boucle conditionnelle.
Variant de boucle : b
Invariant de boucle : a ∧ b
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Exo !
Écrire une fonction qui calcule n! à l’aide d’une boucle
conditionnelle (en langue naturelle ou en Python ou en Caml).
Préliminaires
Itération
Récursivité
Plan
Préliminaires
Bon ordre sur un type ou un ensemble
Tests conditionnels
Itération
Boucles inconditionnelles
Boucles conditionnelles
Récursivité
Récursivité enveloppée
Récursivité terminale
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Récursivité
Définition générique de la récursivité : style de programmation
dans lequel une fonction peut s’appeler elle-même.
Préliminaires
Itération
Récursivité
Récursivité enveloppée : exemple !
Reprenons l’exemple de la factorielle.
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Récursivité enveloppée : exemple !
Calculons n!.
En langue naturelle :
factorielle(n)=
si n=0 alors 1
sinon n*factorielle(n-1)
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Récursivité enveloppée : exemple !
Calculons n!.
En Python :
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Récursivité enveloppée : exemple !
Calculons n!.
En Python :
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Récursivité enveloppée : exemple !
Calculons n!.
En Caml :
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Récursivité enveloppée : exemple !
Calculons n!.
En Caml :
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Récursivité enveloppée : exemple !
Remarque : 987!=?
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Récursivité enveloppée : exemple !
Remarque : 987!=?
(Cf sys.setrecursionlimit)
Python supporte le style récursif mais n’est pas optimisé pour
ce style de programmation.
Caml est optimisé pour le style récursif.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Récursivité enveloppée : généralisation
Plus généralemment, une fonction f : N → X est simplement
récursive enveloppée lorsqu’elle est de la forme :
f(n)=
si n est un cas de base alors une valeur de base
sinon g(n,f(n-1))
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Récursivité enveloppée : généralisation
Plus généralemment, une fonction f : N → X est récursive
enveloppée lorsqu’elle est de la forme :
f(n)=
si n est un cas de base alors une valeur de base
sinon g(n,f(m))
Avec m < n.
(On peut se passer de cette condition mais alors on n’est plus sûr
que le programme termine...)
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Récursivité enveloppée : généralisation
Définition : une fonction f : E → X est récursive enveloppée
lorsqu’elle est de la forme :
f(x)=
si x est un cas de base alors une valeur de base
sinon g(x,f(y))
Avec y <E x où ≤E est un bon ordre sur E .
(On peut se passer de cette condition mais alors on n’est plus sûr
que le programme termine...)
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Pourquoi ”enveloppée” ?
Que se passe-t-il dans le ventre de la bête lors du calcul de 4! ?
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Récursivité terminale : exemple !
L’appel récursif est enveloppé par l’opération ”n*...” pour la
factorielle, par la fonction ”g(...)” en général.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Pourquoi ”enveloppée” ?
Pour qu’un langage supporte la récursivité enveloppée, il doit
disposer d’une pile d’exécution. Les calculs se feront seulement au
moment du dépilage.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Pourquoi ”enveloppée” ?
Pour qu’un langage supporte la récursivité enveloppée, il doit
disposer d’une pile d’exécution. Les calculs se feront seulement au
moment du dépilage.
À chaque appel récursif, on empile. Cela consomme de la mémoire.
C’est dangereux.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Pourquoi ”enveloppée” ?
Pour qu’un langage supporte la récursivité enveloppée, il doit
disposer d’une pile d’exécution. Les calculs se feront seulement au
moment du dépilage.
À chaque appel récursif, on empile. Cela consomme de la mémoire.
C’est dangereux.
(C’est pour ça que le ”recursionlimit” est fixé à 987 en Python.
Caml par contre est optimisé pour gérer convenablement cette
pile.)
Préliminaires
Itération
Récursivité
Plan
Préliminaires
Bon ordre sur un type ou un ensemble
Tests conditionnels
Itération
Boucles inconditionnelles
Boucles conditionnelles
Récursivité
Récursivité enveloppée
Récursivité terminale
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Est-on condamné à envelopper les appels récursifs ?
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Est-on condamné à envelopper les appels récursifs ?
1. Non.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Est-on condamné à envelopper les appels récursifs ?
1. Non.
2. Même si dans un premier temps on ne s’en souciera pas trop.
Préliminaires
Itération
Récursivité
Récursivité terminale : exemple !
Reprenons l’exemple du pgcd.
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Récursivité terminale : exemple !
Calculons a ∧ b.
En langue naturelle :
pgcd(a,b)=
si b=0 alors a
sinon pgcd(b,a mod b)
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Récursivité terminale : exemple !
Calculons a ∧ b.
En Python :
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Récursivité terminale : exemple !
Calculons a ∧ b.
En Python :
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Récursivité terminale : exemple !
Calculons a ∧ b.
En Caml :
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Récursivité terminale : exemple !
Calculons a ∧ b.
En Caml :
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Récursivité terminale : exemple !
On remarque que l’appel récursif est direct ! Il n’est pas
enveloppé par une autre fonction. L’exécution de la fonction ne
nécessite pas de pile. Les calculs ne nécessitent plus d’être différés.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Récursivité terminale : généralisation
Définition : une fonction f : E → X est récursive terminale
lorsqu’elle est de la forme :
f(x)=
si x est un cas de base alors une valeur de base
sinon f(y)
Avec y <E x où ≤E est un bon ordre sur E .
(On peut se passer de cette condition mais alors on n’est plus sûr
que le programme termine...)
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Récursivité terminale : généralisation
Définition : une fonction f : E → X est récursive terminale
lorsqu’elle est de la forme :
f(x)=
si x est un cas de base alors une valeur de base
sinon f(y)
Avec y <E x où ≤E est un bon ordre sur E .
(On peut se passer de cette condition mais alors on n’est plus sûr
que le programme termine...)
Sur l’exemple du pgcd on peut prendre E = N2 et ≤E =≤lex .
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Récursivité terminale : exemple pro !
Reprenons l’exemple de la factorielle.
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Récursivité terminale : exemple pro !
Calculons n! par récursivité terminale.
En langue naturelle :
factorielle(n)=f(n,1) où
f(n,accu)=
si n=0 alors accu
sinon f(n-1,n*accu)
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
Récursivité terminale : exemple pro !
Calculons n! par récursivité terminale.
En langue naturelle :
factorielle(n)=f(n,1) où
f(n,accu)=
si n=0 alors accu
sinon f(n-1,n*accu)
(Ça marche ! Tester pour n=4...)
Préliminaires
Itération
Récursivité
Récursivité terminale : exemple !
Calculons n! par récursivité terminale.
En Python :
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Récursivité terminale : exemple !
Calculons n! par récursivité terminale.
En Python :
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Récursivité terminale : exemple !
Calculons n! par récursivité terminale.
En Caml :
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
Récursivité terminale : exemple !
Calculons n! par récursivité terminale.
En Caml :
À faire pour lundi prochain
Préliminaires
Itération
Récursivité
À faire pour lundi prochain
DM01 !
À faire pour lundi prochain
Téléchargement