Académique Documents
Professionnel Documents
Culture Documents
Rappels
1 – La conditionnelle 1 – La conditionnelle
Récursion sur les entiers naturels ;;; signe: Nombre -> int
;;; (signe x) rend –1, 0, ou 1 selon que x est négatif, nul, ou positif
Pour finir (define (signe x)
(if (< x 0)
–1
(if (= x 0)
0
1)))
Christophe Marsala – 2010 LI101 – cours 3 – 3 Christophe Marsala – 2010 LI101 – cours 3 – 4
1 – La conditionnelle 1 – La conditionnelle
Christophe Marsala – 2010 LI101 – cours 3 – 5 Christophe Marsala – 2010 LI101 – cours 3 – 6
1 – La conditionnelle 2 – La récursivité
La conditionnelle
;;; signe: Nombre -> int
;;; (signe x) rend –1, 0, ou 1 selon que x est négatif, nul, ou positif La récursivité
(define (signe x)
(cond ((< x 0) -1) Récursion sur les entiers naturels
((= x 0) 0)
(else 1))) Pour finir
Christophe Marsala – 2010 LI101 – cours 3 – 7 Christophe Marsala – 2010 LI101 – cours 3 – 8
2 – La récursivité 2 – La récursivité
Dessin fractal : le même dessin à différents niveaux Mise en abyme : une image se contient elle-même
Christophe Marsala – 2010 LI101 – cours 3 – 9 Christophe Marsala – 2010 LI101 – cours 3 – 10
2 – La récursivité 2 – La récursivité
Christophe Marsala – 2010 LI101 – cours 3 – 11 Christophe Marsala – 2010 LI101 – cours 3 – 12
3 – Récursion sur les entiers naturels 3 – Récursion sur les entiers naturels
Factorielle
La récursivité
1 pour n = 0
n! =
n ∗ (n − 1)! pour n ≥ 1
Christophe Marsala – 2010 LI101 – cours 3 – 13 Christophe Marsala – 2010 LI101 – cours 3 – 14
3 – Récursion sur les entiers naturels 3 – Récursion sur les entiers naturels
n n
))
1n
2
x ∗x ∗x2 pour n impair ≥ 1
Christophe Marsala – 2010 LI101 – cours 3 – 15 Christophe Marsala – 2010 LI101 – cours 3 – 16
3 – Récursion sur les entiers naturels 3 – Récursion sur les entiers naturels
◮ Factorielle
C’est une application de fonction comme une autre: règle
;;; fact: nat -> nat
d’évaluation
;;; (fact n) rend la factorielle de n
(define (fact n) Exemple à évaluer
(if (= n 0) (fact 0)
1 (fact 3)
(* n (fact (- n 1))) )) (fact -1)
◮ Repérer le cas de base, l’appel récursif, l’expression pour éviter un processus infini il faut bien faire attention à la
conditionnelle pour reconnaı̂tre le cas de base et le calcul pour condition de reconnaissance du cas de base !
passer à l’étape n.
Christophe Marsala – 2010 LI101 – cours 3 – 17 Christophe Marsala – 2010 LI101 – cours 3 – 18
3 – Récursion sur les entiers naturels 3 – Récursion sur les entiers naturels
◮
Factorielle (version 2)
Le cas de base est LE point clé de toute fonction récursive
• il permet de terminer le traitement récursif (la “récursion”)
;;; fact: Nombre -> nat
• il garantit qu’il existe au moins une valeur de la fonction f qui
;;; (fact n) rend la factorielle de n
;;; ERREUR si n n’est pas positif ou nul
se calcule sans appel à f
(define (fact n)
◮ Lors de l’écriture d’une fonction récursive, il faut s’assurer : (if (or (not (integer? n)) (negative? n))
• que le cas de base sera atteignable (erreur ”fact: n doit être positif ou nul!”)
• que la séquence d’appels récursifs converge vers la valeur du (if (= n 0)
cas de base 1
◮ Le cas échéant (* n (fact (- n 1)))) ))
• élargir la condition pour le cas de base
• provoquer une erreur si l’argument ne permet pas d’atteindre Évaluer
le cas de base (fact 5), (fact -5), (fact 2.5)
Inconvénient : test supplémentaire fait à chaque appel récursif.
Christophe Marsala – 2010 LI101 – cours 3 – 19 Christophe Marsala – 2010 LI101 – cours 3 – 20
Factorielle (version 3)
;;; fact: nat -> nat
;;; (fact n) rend la factorielle de n La conditionnelle
(define (fact n)
(if (= n 0)
La récursivité
1
(* n (fact (- n 1)))) ))
Récursion sur les entiers naturels
;;; factorielle: Nombre -> nat
;;; (factorielle n) rend la factorielle de n
Pour finir
;;; ERREUR si n n’est pas positif ou nul
(define (factorielle n)
(if (or (not (integer? n)) (negative? n))
(erreur ”factorielle: n doit être positif ou nul!”)
(fact n)))
Christophe Marsala – 2010 LI101 – cours 3 – 21 Christophe Marsala – 2010 LI101 – cours 3 – 22
4 – Pour finir